我知道渲染视图按此顺序包含以下3个步骤:
现在我的问题是,如果我修改自定义按钮高度,并且该按钮具有周围视图的约束,我如何更新该约束并避免与视图重叠?你可以看到评论的行,不是它们的作用。
class DynamicHeightButton: UIButton {
override func layoutSubviews() {
super.layoutSubviews()
let size = (self.titleForState(UIControlState.Normal)! as NSString).boundingRectWithSize(CGSizeMake(self.bounds.size.width, CGFloat.max), options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: [NSFontAttributeName : UIFont.systemFontOfSize(17)], context: nil)
self.bounds.size.height = size.height + 8
//viewController!.view.setNeedsUpdateConstraints()
//self.setNeedsUpdateConstraints()
//self.setNeedsLayout()
}
}
答案 0 :(得分:1)
使用Autolayout视图时,不应设置框架。而不是它应该调整约束,通常是常数'属性。
在我的情况下,我正在改变视图的高度,并在此过程中破坏约束。
我在自定义类中添加了3行:
@IBOutlet weak var height: NSLayoutConstraint
self.bounds.size.height = size.height + 8
height.constant = size.height + 8