使用snapkit设置autolayout后,iOS框架出错

时间:2015-12-10 10:17:34

标签: ios swift

我在UIStoryboard中添加一个UIView并将其绑定到一个名为testView的自定义UIView类,然后,我在require init函数的textView中创建一个名为subView的UIView,

这是我的步骤

1初始化subView

2将新的子视图添加到textView

3 set autolayout

4 set cornerRadius(view.frame.height / 2)

运行应用程序后,cornerRadius不会更改

然后我尝试打印subView的框架,得到(0,0,0,0)

这是我的代码

required init?(coder aDecoder: NSCoder) {
   super.init(coder: aDecoder)

   circelView = UIView()
   self.addSubview(circelView)
   circelView.snp_makeConstraints(closure: { (make) -> Void in
       make.size.equalTo(80)
       make.top.equalTo(self.snp_top)
       make.right.equalTo(self.snp_right)
   })
   print(circelView.frame) //get wrong frame
   circelView.layer.cornerRadius = circelView.frame.size.height / 2
   circelView.layer.masksToBounds = true
}

1 个答案:

答案 0 :(得分:3)

您打印框架并设置转角半径时,您的视图没有时间布局。添加AutoLayout约束不会自动布局视图。

要获得正确的结果,您需要在布局视图后设置角半径。这将保证您的框架受到AutoLayout约束的约束。

为此,请在“viewDidLayoutSubviews”中放置任何需要正确框架的代码:

override func viewDidLayoutSubviews() {
    print(circelView.frame) // The frame will have been set
    circelView.layer.cornerRadius = circelView.frame.size.height / 2
}

viewDidLayoutSubviews()UIViewController上可以覆盖的方法,请查看文档here