swift - iphone X 的 TraitCollectionDidChange 行为不同
问题描述
在我的情况下,我根据 traitCollection.horizontalSizeClass 更改视图的布局这是我的代码片段。
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if traitCollection.horizontalSizeClass == .regular {
// 2
NSLayoutConstraint.deactivate(compactConstraints)
NSLayoutConstraint.activate(regularConstraints)
// 3
socialMediaView.axis = .horizontal
} else {
// 4
NSLayoutConstraint.deactivate(regularConstraints)
NSLayoutConstraint.activate(compactConstraints)
socialMediaView.axis = .vertical
}
}
在iphone 7 plus和iphone x的纵向模式
和横向模式下,每件事情都按照指示
工作手机 7 来了。查看以下屏幕截图
解决方案
查看您的问题和状况,我发现您的状况有问题。您应该检查verticalSizeClass而不是horizontalSizeClass。
当检查水平尺寸等级时。
IN PORTRAIT:所有 iPhone 设备都有紧凑的宽度,所以每次都会进入 else 条件并正确设置视图。
在风景中:所有 iPhone Plus (iPhone 6s Plus、iPhone 7 Plus 和 iPhone 8 plus)设备具有常规宽度,所有其他 iPhone (iPhone 6s、6SE、iPhone 7 和 iPhone 8、iPhone X)设备具有紧凑宽度,因此对于所有加上设备,它可以正常工作,但不适用于其他设备。
有关更多信息,请在此处阅读官方文档
因此,将您的代码更新为此。
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if traitCollection.verticalSizeClass == .regular {
NSLayoutConstraint.deactivate(compactConstraints)
NSLayoutConstraint.activate(regularConstraints)
socialMediaView.axis = .horizontal
} else {
NSLayoutConstraint.deactivate(regularConstraints)
NSLayoutConstraint.activate(compactConstraints)
socialMediaView.axis = .vertical
}
}
尝试并分享结果。
推荐阅读
- python-3.x - 从python中的大文件中读取一些特定的行
- r - 如何生成分组堆积条形图
- xcode11 - 如何在 Xcode 设置中删除空格并返回符号
- android - Android:无法使用 videoview 播放视频
- javascript - html css jquery modal 没有在浏览器中打开
- python - Python:列表索引超出范围/追加列表
- python - 从源代码构建 Python 性能
- header - 在 jupyter notebook 中带有自定义编号的 Markdown 标头
- tkinter - 如何创建比例,使用键盘箭头控制它,并使用 tkinter 记录单个值
- c++ - 从成员变量或成员函数中读取值的 C++ 模板