为啥我的约束不能正常工作?

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 计数然后函数返回

【讨论】:

这是预期的 :)

以上是关于为啥我的约束不能正常工作?的主要内容,如果未能解决你的问题,请参考以下文章

在Xcode 9上,约束到边距不能正常工作

右约束在 iphone SE 上无法正常工作

为啥我的第二个按钮在使用自动布局约束时表现不同?

为啥设置约束后不能再调整 NSWindow 的大小?

为啥 Interface Builder 不能为约束设置负倍数,即使 [NSLayoutConstraint constraintWithItem:] 可以?

当我使用自动布局移动视图时,为啥 XCode 5 没有在情节提要中添加约束