ios - 覆盖 ViewController 的 traitCollection
问题描述
默认情况下,iPad 在纵向或横向模式下的 traitCollection 为:宽度:常规,高度:常规
目标:我想为 iPad 纵向模式使用 Width: Compact 和 height:Regular traitCollection。
尝试解决方案:
override var traitCollection: UITraitCollection {
if view.bounds.width < view.bounds.height {
let traitCollection = [UITraitCollection(horizontalSizeClass: .compact), UITraitCollection(verticalSizeClass: .regular)]
return UITraitCollection(traitsFrom: traitCollection)
} else {
let traitCollection = [UITraitCollection(horizontalSizeClass: .unspecified), UITraitCollection(verticalSizeClass: .unspecified)]
return UITraitCollection(traitsFrom: traitCollection)
}
}
问题:上面的代码似乎工作正常,我的 UI 会根据特定于相应特征的约束进行更改。但我在调试器中收到以下日志消息:
类 SizeClassDemo.ViewController 覆盖不支持的 -traitCollection getter。如果您尝试覆盖特征,则必须使用适当的 API。
第二种可能的解决方案:
override func overrideTraitCollection(forChild childViewController: UIViewController) -> UITraitCollection? {
if view.bounds.width < view.bounds.height {
let traitCollection = [UITraitCollection(horizontalSizeClass: .compact), UITraitCollection(verticalSizeClass: .regular)]
return UITraitCollection(traitsFrom: traitCollection)
} else {
let traitCollection = [UITraitCollection(horizontalSizeClass: .unspecified), UITraitCollection(verticalSizeClass: .unspecified)]
return UITraitCollection(traitsFrom: traitCollection)
}
}
第二种解决方案的问题:
因此,为此,我需要将此代码放在父视图控制器上。因此,如果我在登录屏幕中没有父视图控制器,我需要将登录屏幕放在容器视图控制器中,然后将此方法放在父视图控制器的类中,这不是最佳解决方案。
问题:
我可以安全地忽略第一个解决方案的日志消息吗?有没有其他方法可以改变视图控制器的 traitCollection。
解决方案
推荐阅读
- python - 搜索两个数据框以了解变量何时在同一行相遇
- docker - 同一个 Docker 层怎么会有不同的大小?
- excel - 从 Windows 服务应用程序运行 Excel 宏时出错
- kubernetes-helm - Helm模板 - 如何在数组中使用“如果至少存在一个”?
- python - Python重新查找所有匹配的重复模式
- ruby - 用于 Sed 命令的 Ruby Escape 反斜杠
- javascript - Ajax/jQuery 脚本如何在一个表单 url 中显示 2+ 个相关的下拉框条目?
- python - 根据时间序列数据是否匹配功能约束为数据框分配新的列值
- c# - 有没有一种方法可以查找包含许多子文件夹的目录中是否存在文件?
- python - 如何修复turtle,python库中的“主线程不在主循环”错误?