programing

예외 발생 : "제약에 대해 준비되지 않은보기 계층 구조로 레이아웃을 설정할 수 없음"

yoursource 2021. 1. 14. 23:27
반응형

예외 발생 : "제약에 대해 준비되지 않은보기 계층 구조로 레이아웃을 설정할 수 없음"


내 스토리 보드 응용 프로그램 UITextField에서 인터페이스 에 추가하려고합니다 . 그러나 나는 제목이 말하는 예외를 얻습니다. SwiftAutoLayout 라이브러리를 사용 합니다. 내 코드는 다음과 같습니다.

// MARK: - IBOutlets

@IBOutlet weak var passwordTextField: UITextField!

// MARK: - Properties

let userIdTextField = UITextField()

// MARK: - Lifecycle

override func viewDidLoad() {
    super.viewDidLoad()

    self.passwordTextField.keyboardType = .NumberPad

    if getCurrentUserId() == nil {
        self.view.addSubview(userIdTextField)
        userIdTextField.setTranslatesAutoresizingMaskIntoConstraints(false)
        self.view.addConstraints([userIdTextField.al_leading == passwordTextField.al_leading,
            userIdTextField.al_trailing == passwordTextField.al_trailing,
            userIdTextField.al_top == passwordTextField.al_bottom + 8])
        userIdTextField.placeholder = "Enter User Id..."
    }
}

passwordTextField제약 조건을 바인딩하기 전에 수퍼 뷰에 추가해보십시오 .


UPD (@vmeyer 및 @MacMark에게 감사) : 뷰 계층 구조가이 작업에 대해 준비되지 않았을 수 있으므로 viewDidLoad또는 viewWillAppear/가 viewDidAppear아닌 updateViewConstraints 또는 viewWillLayoutSubviews제약 조건을 추가하는 것이 더 안전 합니다.


뷰 계층 구조가 설정되어 있지만 제약 조건이 아니기 때문에 viewDidLoad에 제약 조건을 추가하지 않는 것이 좋습니다. updateViewConstraints 또는 viewWillLayoutSubviews를 선호해야합니다.


현재 뷰 계층 구조에서 추가 / 생성되지 않은 뷰에 제약 조건을 추가하려고합니다. 먼저보기를 추가 한 다음 제약 조건을 적용합니다.

참조 URL : https://stackoverflow.com/questions/26349234/getting-exception-impossible-to-set-up-layout-with-view-hierarchy-unprepared-f

반응형