在AutoLayout-iOS

时间:2018-09-11 08:46:39

标签: ios autolayout storyboard constraints

我遇到一个奇怪的问题,我正在使用情节提要在视图上设置约束,如下所示: enter image description here

但是,如果我通过代码访问所有应用的约束,那么总会得到零(0)。

enter image description here

对于self.view,它返回约束,但对于黄色视图,它返回零。

3 个答案:

答案 0 :(得分:3)

使用此代码(Swift 4+和Xcode 9.4.1)

import UIKit

class ViewController: UIViewController {

@IBOutlet var subView: UIView!

override func viewDidLoad() {
    super.viewDidLoad()
    print(self.view.getAllConstraints().count)
    print(self.subView.getAllConstraints().count)
  }
}

extension UIView {

func getAllConstraints() -> [NSLayoutConstraint] {
    var views = [self]
    var view = self
    while let superview = view.superview {
        views.append(superview)
        view = superview
    }
    return views.flatMap({ $0.constraints }).filter { constraint in
        return constraint.firstItem as? UIView == self ||
            constraint.secondItem as? UIView == self
    }
   }
  }

答案 1 :(得分:0)

供您参考,当viewDidLoad称为子视图时,尚未提供布局信息,这就是为什么计数为零时将代码放入viewDidLayoutSubviews的原因,在那里您会受到约束

Demo

答案 2 :(得分:0)

只需尝试在viewDidAppear中打印约束。在viewDidLoad方法约束中,视图未加载,因此,只需在viewDidAppear方法中尝试。