我正在覆盖traitCollectionDidChange(_)
来更新我的紧凑和常规约束。当我通过旋转约束在设备上测试它时,可以正确更新。然而,当我尝试在模拟器中测试相同的代码时,没有任何反应。我插入了印刷语句,我可以看到在模拟器上旋转没有任何反应。这是一个错误,还是我需要为模拟器做一些特别的事情?
提前致谢。我正在使用Xcode 8.2.1 btw。
这是我的代码:
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。
答案 0 :(得分:0)
可能是您的实际测试设备是iPhone而您的模拟器是iPad吗? traitCollectionDidChange方法不会在后者上调用,因为两个方向都是常规的。
答案 1 :(得分:0)
horizontalSizeClass
均为Compact
。对于iPhone SE,verticalSizeClass
regular
为portrait
,Compact
为landscape
。你可以改变这一行
if (traitCollection.containsTraits(in: UITraitCollection(verticalSizeClass: .compact))) {
或只是
if traitCollection.verticalSizeClass == .compact {
如果您正在寻找与大小更改动画一起运行的动画,也可以使用viewWillTransitionToSize:withTransitionCoordinator:
。
Building an Adaptive Interface
如果您的自动布局限制不足以实现外观 你想要的,你可以使用
viewWillTransitionToSize:withTransitionCoordinator:
方法 更改您的布局。您也可以使用该方法进行创建 与尺寸变化动画一起运行的其他动画。对于 例如,在界面旋转期间,您可以使用转换 协调器的targetTransform属性用于创建反向旋转 接口部分的矩阵。