스토리 보드에서 자동 레이아웃을 사용하는 경우 제약 조건을 설치하거나 '설치됨'확인란을 사용하지 않을 수 있습니다. 이것을 비활성화하면 제약 조건을 추가하지 않은 것처럼 행동하게됩니다. 아무런 효과가 없습니다. Interface Builder에서 다른 크기 클래스에 대해 설치된 상태를 구성 할 수 있으며 active
속성을 true
또는 false
으로 설정하여이 값을 프로그래밍 방식으로 변경할 수 있습니다.자동 레이아웃 제약 조건을 위해 "installed"를 바꿀 위치는 어디입니까?
내 응용 프로그램에서 장치가 세로 방향 인 동안에 만 구속 조건을 설치하고 싶습니다. 가로 방향으로 회전 할 때 "제거"해야합니다. 이것은 Any Width Compact Height 용으로 설치된 장치의 선택을 취소하여 iPhone 용으로 수행 할 수 있습니다. (그러나 이것은 설치가되어서는 안되는 풍경으로 회전 할 때 상충되는 제약으로 인해이 제약 조건이 깨지기 때문에 제대로 작동하지 않지만 UI는 항상 예상대로 나타납니다.) 그러나 제거 할 방법은 없습니다 인터페이스 빌더에서 iPad의 풍경에 대한 제약 (두 방향의 일반 너비 일반 높이).
기기를 회전 할 때 NSLayoutConstraint
에 active
을 활성화/비활성화 할 수있는 적절한 위치는 어디입니까? 어떤 회전 방식으로 상태가 원하는 동작으로 바뀌고 세로 방향으로 만 설치됩니까? 앱 실행시 해당 메소드가 호출되지 않으면 순환 메소드 이외에 다른 메소드를 배치해야합니까?
내가 viewDidLoad
및 viewWillTransitionToSize
에 다음 코드를 삽입하려고했지만 아이 패드에서 실행 때 일부 예기치 않은 동작이 결과 :
- 풍경에 응용 프로그램을 시작 제약 조건이 활성 사실에도 불구하고 활성화됩니다 false로 설정하면 제약 조건이 깨지고 예상대로 UI가 표시되지 않습니다.
- 앱을 세로로 설정하면 (예 : IB에 이미 설치되어 있으므로) 예상대로 작동합니다.
- 앱 실행 초상화에서 그리고 회전 장치가 가로로 예상대로 작동 함 - 제약 조건이 비활성으로 설정되고 제약 조건을 위반하지 않고 UI가 예상대로 나타남
- 앱을 세로 방향으로 시작하고 가로 방향으로 회전하고 세로 방향으로 돌아 가면 UI가 올바르게 표시되지만
인터페이스 작성기에서 제약 조건을 제거한 다음 위의 시나리오를 실행하면 본질적으로 반대되는 동작이 발생합니다.
if size.width > size.height {
self.myConstraint.active = false
} else {
self.myConstraint.active = true
}