问题描述
在纵向或横向模式下,iPad的默认traitCollection为:宽度:常规,高度:常规
目标:我想为iPad纵向模式使用Width:紧凑型和height:常规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: .unspecified)]
return uitraitcollection(traitsFrom: traitCollection)
}
}
第二个解决方案的问题:
因此,要使其正常工作,我需要将此代码放在父视图控制器上。因此,如果例如在登录屏幕中没有父视图控制器,则需要将登录屏幕放在容器视图控制器中,然后将此方法放在父视图控制器的类中,这不是最佳解决方案。
问题:
我可以通过第一个解决方案安全地忽略日志消息吗?还有什么其他方法可以改变视图控制器的traitCollection。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)