Количество ограничений всегда равно нулю (0) в AutoLayout - iOS - PullRequest
0 голосов
/ 11 сентября 2018

У меня одна странная проблема, я устанавливаю ограничения для представления с использованием раскадровки, как показано ниже: enter image description here

Но если я получаю доступ ко всем применяемым ограничениям по коду, то всегда получаю ноль (0).

enter image description here

для self.view он возвращает ограничение, но для желтого представления - ноль.

Ответы [ 3 ]

0 голосов
/ 11 сентября 2018

Просто попробуйте напечатать ограничения в viewDidAppear. В viewDidLoad ограничения метода не загружены для просмотра, поэтому попробуйте метод viewDidAppear.

0 голосов
/ 11 сентября 2018

Используйте этот код (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
    }
   }
  }
0 голосов
/ 11 сентября 2018

для вашей информации, когда viewDidLoad называется subviews, пока не выложено, поэтому, когда вы получаете нулевой счет, вы вводите код в viewDidLayoutSubviews, вы получите свои ограничения там

Demo

...