在AutoLayout - iOS中,约束计数总是变为零

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在AutoLayout - iOS中,约束计数总是变为零相关的知识,希望对你有一定的参考价值。

我得到一个奇怪的问题,我正在使用如下的故事板设置视图的约束:enter image description here

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

enter image description here

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

答案

使用此代码(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
    }
   }
  }
另一答案

试着在viewDidAppear中打印约束。在viewDidLoad方法约束中没有为视图加载,所以只需尝试使用viewDidAppear方法。

另一答案

对于viewDidLoad被称为subviews的你的信息还没有列出那就是为什么你得到零,把代码放到viewDidLayoutSubviews你会得到你的约束

Demo

以上是关于在AutoLayout - iOS中,约束计数总是变为零的主要内容,如果未能解决你的问题,请参考以下文章

iOS - AutoLayout'无法同时满足约束'

何时在 iOS 7 中使用 AutoLayout 更新约束

IOS/Autolayout:在生命周期中为代码中创建的元素设置约束

IOS / Autolayout:在生命周期中为代码中创建的元素设置约束

AutoLayout:在代码中居中两个视图会导致约束异常?

带有约束的 iOS 6.0 AutoLayout 问题:旋转时子视图消失