动态更改UIImageview的高度

时间:2018-11-07 10:59:14

标签: ios swift uiimageview

我在UITableViewCell中有一个UIImageview,它的高度需要根据图像的大小而改变,所以我做了

override func viewDidLoad() {
    ...
    tableView.estimatedRowHeight = 500.0  //arbitrary value
    tableView.rowHeight = UITableViewAutomaticDimension
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    //change height of UIImageView
    let image_width = homeViewCell.mainImageView.frame.size.width
    let image_height = image_width * CGFloat(viewModel.imageScale)
    homeViewCell.mainImageView.frame.size.height = image_width * CGFloat(viewModel.imageScale)
    //load image
    _ = homeViewCell.mainImageView.af_setImage(withURL: URL(string: serverURL + viewModel.mainImage)!, placeholderImage: UIImage(named : "home_placeholder") ...
}

在情节提要中,我将imageview的高度限制设置为固定数字,将内容模式设置为“缩放比例”

这不会根据图像的大小调整UIImageView的大小。

1 个答案:

答案 0 :(得分:0)

由于您使用的是自动布局约束,因此需要更新高度约束,而不是图像视图框架。因此,将您的高度约束连接为tableViewCell中的IBOutlet heightConstraint。然后在表视图cellForRowAt中必须设置cell.heightConstraint.constant = image_height。这将给您想要的结果。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
   // don't forget to dequeue your table view cell here
   //change height of UIImageView
   let image_height = image_width * CGFloat(viewModel.imageScale)
   cell.heightConstraint.constant = image_height
   //load image
   _ = homeViewCell.mainImageView.af_setImage(withURL: URL(string: serverURL + viewModel.mainImage)!, placeholderImage: UIImage(named : "home_placeholder") ...
}