我只是在看新 iPad Air 2 上的时钟应用程序,当更改方向时,它会影响布局。世界时钟选项卡中有 6 个时钟,纵向有 2 行,每行 3 个时钟,但横向有 1 行,每行 6 个时钟。
我没有看到任何基于 xcode 6 中的尺寸类别的内容,允许区分横向和纵向,是否有不同/更好的方法来做到这一点?
最佳答案
有一个方法-- willTransitionToTraitCollection:withTransitionCoordinator: --让您知道任何特征(例如水平尺寸类别、垂直尺寸类别、显示比例或用户界面习惯用法)何时发生变化。
当时,您可以检查
newCollection.verticalSizeClass
以查看它是否等于.Compact
(横向)或.Regular
(纵向) UIDevice.currentDevice().userInterfaceIdiom != .Pad
例如:
override func willTransitionToTraitCollection(newCollection: UITraitCollection, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
super.willTransitionToTraitCollection(newCollection, withTransitionCoordinator: coordinator)
if UIDevice.currentDevice().userInterfaceIdiom != .Pad {
switch newCollection.verticalSizeClass {
case .Compact:
goLandscapeWithCoordinator(coordinator)
case .Regular, .Unspecified:
hideLandscapeWithCoordinator(coordinator)
}
}
}
goLandscapeWithCoordinator(coordinator)
可能看起来像这样,例如:
func goLandscapeWithCoordinator(coordinator: UIViewControllerTransitionCoordinator) {
let landscapeVC = storyboard!.instantiateViewControllerWithIdentifier("LandscapeViewController") as? LandscapeViewController
if let controller = landscapeVC {
controller.view.frame = view.bounds
controller.view.alpha = 0
view.addSubview(controller.view)
addChildViewController(controller)
coordinator.animateAlongsideTransition({ _ in
controller.view.alpha = 1
},
completion: { _ in
controller.didMoveToParentViewController(self)
})
}
}
关于ios - 如何根据 iPad 上的方向更改布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31280191/