UITableViewCell - iOS 10 中何时正确设置边界

Tho*_*ard 5 uitableview swift2 ios10

我想在 UITableViewCell 内创建一个圆形 UIView (myView)

在 iOS 10 之前,我曾经func awakeFromNib()这样做过:

class MyCell: UITableViewCell {

@IBOutlet var myView: UIView!

    override func awakeFromNib() {
      super.awakeFromNib()

      print(myView.bounds.height)
      myView.layer.cornerRadius = myView.bounds.height/2
      myView.layer.masksToBounds = true
    }
}
Run Code Online (Sandbox Code Playgroud)

myViewheight 和 with通过故事板中的自动布局约束设置为30 。

但在控制台中print(myView.bounds.height)显示1000.0 。所以圆角半径指令将半径设置为500myView完全消失。

UITableViewCelliOS 10 的生命周期有变化吗?iOS 10 中设置 view.bounds 的函数是否发生变化?cornerRadius如何在 iOS 10 中将视图高度设置为一半?

这是重现该问题的最小项目

为了得到接近我想要的结果,我需要在我的UITableViewController

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    tableView.reloadData()
}
Run Code Online (Sandbox Code Playgroud)

但我很确定这不是最佳的......

小智 0

当询问子视图的边界时,我遇到了完全相同的问题,大小相同,为1000.0 。

由于框架边界值不再可靠,我必须为故事板中定义的高度约束声明一个 IBOutlet,并使用它来设置子视图的角半径。

class MyCell: UITableViewCell {

@IBOutlet var myView: UIView!
@IBOutlet var myViewHeightConstraint: NSLayoutConstraint!

    override func awakeFromNib() {
        super.awakeFromNib()

        print(myView.bounds.height)
        myView.layer.cornerRadius = myViewHeightConstraint.constant / 2
        myView.layer.masksToBounds = true
      }
}
Run Code Online (Sandbox Code Playgroud)

这将使您能够删除reloadData确实不是您所说的最佳选择的呼叫。