代码:
class ViewController: UIViewController{
var button = CustomButton()
override func viewDidLoad(){
super.viewDidLoad()
button.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(button)
//add constraints and etc.
}
}
class CustomButton: UIButton{
override func layoutSubviews() {
super.layoutSubviews()
self.layer.cornerRadius = self.layer.frame.width * 0.5
self.setTitle("abc", forState: .Normal)
}
}
问题1:为了让super.layoutSubviews()
工作,我怎么来电setTitle()
? (即cornerRadius
确实设置但不是标题)
问题2:我尝试将layoutSubviews()
中的代码放在drawRect()
中,但这并不会更改cornerRadius
。
答案 0 :(得分:2)
UIButton
包含UILabel
个子视图以显示其标题。如果您不致电super.layoutSubviews()
,则该子标签无法正确设置。
答案 1 :(得分:1)
UIButton是一个UIView,它有自己的layoutSubviews
实现。您仍然希望确保调用代码,从而调用super.layoutSubviews()
。 另外到默认实现(而不是),您需要设置cornerRadius
和title
,以便在调用super之后添加该代码。
如果您没有覆盖方法期间,则在调用layoutSubviews()
时默认会调用UIView中的layoutIfNeeded
。如果您覆盖它并且不要调用super.layoutSubviews()
,那么您基本上只是删除了Apple的方法实现。
在覆盖UIViewController子类中的方法时,应该调用super.viewDidLoad()
的原因相同。