我发现了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
While it should look like this in portrait mode
有谁知道这里可能出了什么问题?为什么它没有按照需要改变尺寸类别。
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(使用前将#替换为@)