traitCollectionDidChange(_)
을 무시하고 컴팩트하고 규칙적인 제약 조건을 업데이트합니다. 제약 조건을 회전하여 장치에서이를 테스트 할 때 올바르게 업데이트됩니다. 그러나 시뮬레이터에서 동일한 코드를 테스트하려고하면 아무 일도 일어나지 않습니다. print 문을 사용하여 시뮬레이터 회전시 아무 것도 발생하지 않는다는 것을 알 수 있습니다. 이 버그입니까, 아니면 시뮬레이터를 위해 특별한 것을해야합니까?Xcode 시뮬레이터가 traitCollectionDidChange를 호출하지 않습니다.
미리 감사드립니다. 나는 Xcode 8.2.1 btw를 사용하고있다. hoshy
의 질문에 따라
[launch app]
`going to activate: compact`
[rotate the simulator with ⌘ arrow key]
`going to activate: compact`
작은 갱신 :
다음과private var compactConstraints: [NSLayoutConstraint] = []
private var regularConstraints: [NSLayoutConstraint] = []
private var sharedConstraints: [NSLayoutConstraint] = []
...
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if (!sharedConstraints[0].isActive) {
// activating shared constraints
NSLayoutConstraint.activate(sharedConstraints)
}
if (self.traitCollection.containsTraits(in: UITraitCollection(horizontalSizeClass: UIUserInterfaceSizeClass.compact))) {
print("going to activate: compact")
if regularConstraints.count > 0 && regularConstraints[0].isActive {
NSLayoutConstraint.deactivate(regularConstraints)
}
// activating compact constraints
NSLayoutConstraint.activate(compactConstraints)
} else {
print("going to activate: regular")
if compactConstraints.count > 0 && compactConstraints[0].isActive {
NSLayoutConstraint.deactivate(compactConstraints)
}
// activating regular constraints
NSLayoutConstraint.activate(regularConstraints)
}
}
콘솔 출력 될 때 :
이 내 코드입니다 을 나는 아이폰 장치와 시뮬레이터를 사용하고 있습니다. 특히 iPhone SE.
감사합니다. :-) if-else 문을 수정하여 vertical 및 horizontalSizeClasses를 모두 확인했습니다. 그렇게하면 iPads를 더 잘 다룰 수 있습니다. – Joseph