我在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
}
答案 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。