如何在cellForRowAtIndexPath期间获取imageView的帧大小?

时间:2016-07-20 02:39:24

标签: ios swift

我正在尝试将UITableViewController与XIB一起使用,而不是使用故事板,并使用默认样式:UITableViewCellStyleDefault。我想将默认imageView的{​​{1}}设置为cornerRadius的宽度/ 2,但在imageView期间,cellForRowAtIndexPath()为0,0,0 ,0。

我记得在某处看到框架在添加到子视图之前不会更新。

如何获取imageViewimageView.frame.size.width正确显示行,但UITableView为0。

cornerRadius

2 个答案:

答案 0 :(得分:2)

下面的行不会布局任何用户界面,所以你现在无法获得任何类型的维度。

cell.imageView?.image = UIImage.init(imageLiteral: "\(indexPath.row).jpg")

一种方法是获取图像尺寸

let image = UIImage.init(imageLiteral: "\(indexPath.row).jpg")
cell.imageView?.image = image
let size = image.size

然后用这个尺寸做其余的事。

但是如果您的图像太大,那么您可能需要考虑相应调整大小的方法,因为它会根据实际图像的大小加载图像,并且可能与您预期的不同。

答案 1 :(得分:1)

实现目标的一种可能方式:
对UITableViewCell进行子类化,并覆盖layoutSubviews()

override func layoutSubviews() {
    super.layoutSubviews()
    self.imageView?.layer.cornerRadius = cell.imageView!.frame.size.width / 2
}