我有一个自定义的UITableViewCell,我正试图在我的表视图的笔尖中设置它。我有一个用来设置我的细胞的方法,setupCell()
,似乎没有正确地获得我的身高。
我在tableView heightForRow方法中设置了高度,如下所示:
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
let cell = tableView.dequeueReusableCellWithIdentifier(kProfilePicIdentifier) as! ProfilePictureTableViewCell
return cell.computeHeight()
}
这将单元格带到此方法来设置高度:
override func computeHeight() -> CGFloat {
let screenRect = UIScreen.mainScreen().bounds
let height = screenRect.height * 0.4
return height
}
setupCell方法看起来是这样的:
override func setupCell() {
profilePicture.image = UIImage(named: "prof_pic")
profilePicture.layer.cornerRadius = profilePicture.frame.size.height / 4.6
profilePicture.clipsToBounds = true
}
cornerRadius公式使它能够精确地用于我设置的高度。但是,一旦我改变computeHeight
函数的高度,这反过来又改变了tableViewCell行的高度,圆圈就会变得一团糟,因为它似乎没有得到正确的高度。
profilePicture出口被设置为视图总高度的一半大小,但它似乎并没有反映出当我调用setupCell
时,它总是被设置为恒定大小,而不是视图的一半大小。
有人知道单元格的高度是什么时候设置的吗?我什么时候可以调用这个方法,这样我就可以很容易地将高度除以2,得到半径?
编辑:所以我通过在layoutSubviews()
中放置角逻辑来实现它,但我仍然有兴趣知道笔尖内图像的实际高度是什么时候设置的。
如果您使用的是自动布局,您可以覆盖viewDidLayoutSubviews,它将在通过布局引擎后立即调用。viewDidlayout可以多次调用子视图。到最后一次调用viewDidLayoutSubviews时,已设置viewController的所有子视图帧。然而,当一个特定的帧被设置时是未定义的,但您可以在viewDidLayoutSubviews中放置一个print语句,以了解它的帧是哪个传递集。