我在UITableViewCell中有一个循环UIButton,我正在以编程方式创建。它工作正常,直到我添加一个约束来将其置于其超级视图中。
在我向其添加约束之前,这就是我的按钮的样子:
这就是我添加约束后的样子:
这是我的代码:
var thumbnailBtn = UIButton.buttonWithType(.Custom) as! UIButton
func setupViews() {
backgroundColor = .colorFromCode(0x3f3f3f)
thumbnailBtn.frame = CGRectMake(0, 0, 80, 80)
thumbnailBtn.layer.cornerRadius = 0.5 * thumbnailBtn.bounds.size.width
thumbnailBtn.backgroundColor = UIColor.greenColor()
thumbnailBtn.setTitle("Test", forState: UIControlState.Normal)
thumbnailBtn.addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside)
contentView.addSubview(menuControlContainerView)
menuControlContainerView.addSubview(thumbnailBtn)
updateConstraints()
}
override func updateConstraints() {
if !didSetupConstraints {
UIView.autoSetPriority(1000) {
self.menuControlContainerView.autoSetContentCompressionResistancePriorityForAxis(.Vertical)
}
menuControlContainerView.autoPinEdgeToSuperviewEdge(.Top, withInset: 0)
menuControlContainerView.autoPinEdgeToSuperviewEdge(.Leading, withInset: 0)
menuControlContainerView.autoPinEdgeToSuperviewEdge(.Trailing, withInset: 0)
menuControlContainerView.autoPinEdgeToSuperviewEdge(.Bottom, withInset: 0)
thumbnailBtn.autoCenterInSuperview()
didSetupConstraints = true
}
super.updateConstraints()
}
我注意到,如果我将这行代码[thumbnailBtn.autoSetDimensionsToSize(CGSizeMake(80, 80))
]添加到updateConstraints()
,它的工作原理如下:
但这是最简洁的方法吗,因为我设置了两次大小?
任何帮助将不胜感激。感谢。
答案 0 :(得分:1)
您可以在初始帧中设置大小,但是稍后开始使用约束来指定位置(和超视图布局)时这是不合适的。实际上你应该创建一个普通视图(使用你正在使用的第三方库中的相应方法)然后使用约束指定大小和位置(你已经尝试过的那些是合适的)。
视图很可能在您居中时调整大小,因为第三方库将自动调整大小掩码转换为约束,这允许约束引擎基本上做任何想要的事情,因为任何设置都满足方程式。