【问题标题】: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
    } 
}

【问题讨论】:

    标签: ios swift autolayout


    【解决方案1】:

    这里去掉return

    if flagForOriginalConstraints == 0 {
        self.constraintsArray = self.view.constraints
        self.flagForOriginalConstraints += 1
            return
        }
    

    好像第一次你只是增加 flagForOriginalConstraints 计数然后函数返回

    【讨论】:

    • 这是预期的 :)
    猜你喜欢
    • 2017-01-30
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多