반응형
예외 발생 : "제약에 대해 준비되지 않은보기 계층 구조로 레이아웃을 설정할 수 없음"
내 스토리 보드 응용 프로그램 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를 선호해야합니다.
현재 뷰 계층 구조에서 추가 / 생성되지 않은 뷰에 제약 조건을 추가하려고합니다. 먼저보기를 추가 한 다음 제약 조건을 적용합니다.
반응형
'programing' 카테고리의 다른 글
"ReferenceError : expect is not defined"오류 메시지를 어떻게 해결할 수 있습니까? (0) | 2021.01.14 |
---|---|
`struct X typedef`와`typedef struct X`의 의미는 무엇입니까? (0) | 2021.01.14 |
AngularJS Core 대 Angular JS Nuget 패키지? (0) | 2021.01.14 |
Pandas의 샘플 데이터 세트 (0) | 2021.01.14 |
android logcat 로그 수다스러운 모듈 라인 만료 메시지 (0) | 2021.01.14 |