覆盖ViewController的traitCollection

问题描述

在纵向或横向模式下,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 (将#修改为@)