滚动前不正确的单元格大小

时间:2019-05-15 14:45:47

标签: swift uitableview uiimageview nslayoutconstraint

我有一个UITableView和一个UIImageView。用户可以发布图片,并将其显示在此UITableView中(类似于社交网络/媒体应用)。

我遇到的问题是,在创建帖子并回到主UITableView后,重新加载表格时图像显得很小。但是,当我滚动并且该单元格退出屏幕后,它会更新为正确的大小。

因为我正在裁剪图像,并且它们可以是纵向或横向,所以我正在计算图像的比例,除非它们超过特定大小,然后将约束常数设置为设置的大小。

这里有一些代码可以查看我要执行的操作:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.myTableView.reloadData()
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
   if let imageCrop = cell.myImageView.image?.getCropRatio() as? CGFloat {
       if let height = tableView.frame.size.width / imageCrop as? CGFloat {
           if height >= 350 {
               cell.myImageHeightConstraint.constant = 350
           } else {
               cell.myImageHeightConstraint.constant = height
           }
       }
   } else {
       cell.myImageHeightConstraint.constant = 350
   }
}

func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {        
    return UITableView.automaticDimension
}

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

extension UIImage {
    func getCropRatio() -> CGFloat {
        let widthRatio = CGFloat(self.size.width / self.size.height)
        return widthRatio
    }
}

更新:

在情节提要中,图像高度设置为<=350。如果将其设置为350或更改优先级,则会得到相反的效果,因此图像始终从350开始,然后在滚动后调整大小。

0 个答案:

没有答案