具有容器视图的 iPad 纵向和横向模式的不同尺寸类别

2024-01-01

我发现了this https://stackoverflow.com/questions/26633172/sizing-class-for-ipad-portrait-and-landscape-modes/28268200#28268200问题,我尝试实施所给出的解决方案。但是我遇到了一个问题。

我的初始视图控制器有两个容器视图,它们都有自己的视图控制器。我创建了一个分配给初始视图控制器的根视图控制器。这个类中的代码如下所示。

class RootViewController: UIViewController {

var willTransitionToPortrait: Bool!
var traitCollection_CompactRegular: UITraitCollection!
var traitCollection_AnyAny: UITraitCollection!

override func viewDidLoad() {
    super.viewDidLoad()
    setupReferenceSizeClasses()
    // Do any additional setup after loading the view.
}

override func viewWillAppear(animated: Bool) {
    willTransitionToPortrait = self.view.frame.size.height > self.view.frame.size.width
}

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
    willTransitionToPortrait = size.height > size.width
}

func setupReferenceSizeClasses(){
    let traitCollection_hCompact = UITraitCollection(horizontalSizeClass: .Compact)
    let traitCollection_vRegular = UITraitCollection(verticalSizeClass: .Regular)
    traitCollection_CompactRegular = UITraitCollection(traitsFromCollections: [traitCollection_hCompact, traitCollection_vRegular])
    
    let traitCollection_hAny = UITraitCollection(horizontalSizeClass: .Unspecified)
    let traitCollection_vAny = UITraitCollection(verticalSizeClass: .Unspecified)
    traitCollection_AnyAny = UITraitCollection(traitsFromCollections: [traitCollection_hAny, traitCollection_vAny])
}

override func overrideTraitCollectionForChildViewController(childViewController: UIViewController) -> UITraitCollection? {
    let traitCollectionForOverride = ((willTransitionToPortrait) != nil) ? traitCollection_CompactRegular : traitCollection_AnyAny
    
    return traitCollectionForOverride;
}

但是,当我运行它时,尺寸类别不会像应有的那样响应。容器视图控制器之一在横向和纵向模式下都会开始表现得很奇怪,如下所示。

When I don't assign the rootviewcontroller it will look like this landscape mode portrait mode

While it should look like this in portrait mode portrait mode how it should look

有谁知道这里可能出了什么问题?为什么它没有按照需要改变尺寸类别。

EDIT就像 @Muhammad Yawar Ali 询问的那样,这里是我设置的所有尺寸类别的位置的屏幕截图。我没有关于任何约束的警告或错误,因此这些屏幕截图包含更新的视图。

我希望这能显示出所需的一切。

编辑: 由于某种原因我无法输入所有屏幕截图


On the viewWillTransitionToSize您还需要调用 super,将事件传递给下一个响应者(您的 rootviewcontroller)...

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
    willTransitionToPortrait = size.height > size.width
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有容器视图的 iPad 纵向和横向模式的不同尺寸类别 的相关文章

随机推荐