为啥我的约束不能正常工作?
Posted
技术标签:
【中文标题】为啥我的约束不能正常工作?【英文标题】:Why my constraints isn't working as they should?为什么我的约束不能正常工作? 【发布时间】:2016-06-26 17:19:43 【问题描述】:我在 Interface Builder 中有一些约束,所以当视图加载时,我将删除所有约束并从代码中添加新约束,但它们被搞砸了
这是我的代码(我知道这是一个带有标志等的坏样式代码,很抱歉,但问题是它为什么会导致布局错误):
override func viewWillAppear(animated: Bool)
super.viewWillAppear(true)
self.view.layoutIfNeeded()
self.view.setNeedsUpdateConstraints()
self.view.layoutIfNeeded()
self.buttonsArray.forEach() button in
NSLayoutConstraint(item: button, attribute: .CenterX, relatedBy: .Equal, toItem: self.view, attribute: .CenterX, multiplier: 1, constant: 0).active = true
NSLayoutConstraint(item: button, attribute: .CenterY, relatedBy: .Equal, toItem: self.view, attribute: .CenterY, multiplier: 1, constant: 0).active = true
NSLayoutConstraint(item: button, attribute: .Height, relatedBy: .Equal, toItem: self.view, attribute: .Height, multiplier: 0.15, constant: 0).active = true
var flagForOriginalConstraints = 0
override func viewDidLayoutSubviews()
super.viewDidLayoutSubviews()
if flagForOriginalConstraints == 0
self.constraintsArray = self.view.constraints
self.flagForOriginalConstraints += 1
return
if flagForOriginalConstraints == 1
self.view.removeConstraints()
self.flagForOriginalConstraints += 1
return
【问题讨论】:
【参考方案1】:这里去掉return
if flagForOriginalConstraints == 0
self.constraintsArray = self.view.constraints
self.flagForOriginalConstraints += 1
return
好像第一次你只是增加 flagForOriginalConstraints 计数然后函数返回
【讨论】:
这是预期的 :)以上是关于为啥我的约束不能正常工作?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Interface Builder 不能为约束设置负倍数,即使 [NSLayoutConstraint constraintWithItem:] 可以?