Я переопределяю traitCollectionDidChange(_)
, чтобы обновить мои компактные и обычные ограничения. Когда я тестирую это на устройстве, вращая ограничения, они обновляются правильно. Однако, когда я пытаюсь протестировать тот же код в симуляторе, ничего не происходит. Я вставил операторы печати и вижу, что при вращении симулятора ничего не происходит. Это баг или нужно что-то специально делать для симулятора?
Заранее спасибо. Я использую Xcode 8.2.1, кстати.
Это мой код:
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)
}
}
Вывод консоли выглядит следующим образом:
[launch app]
`going to activate: compact`
[rotate the simulator with ⌘ arrow key]
`going to activate: compact`
Небольшое обновление, основанное на вопросе hoshy
: я использую симулятор с устройствами iPhone. В частности, iPhone SE.