我正在关注这篇文章,以便在ios Building Adaptive User Interfaces for iOS 8中构建自适应布局。
它可以在iPhone上正常使用。
现在我不想在iPad上给出同样的效果。但对于iPad自适应布局是行不通的
以下是iPhone5中应用程序的屏幕截图(绿色框表示view1,黄色框表示view2)
1.Portrait模式
问题:如何才能为iPad实现同样的效果? 扩展问题:如何在横向模式下设置iPad的初始方向?
答案 0 :(得分:6)
iPad的问题在于两个方向都表示为常规。
其中一个解决方案是将两个IBOutlet集合添加到您希望更改此方向的视图控制器中,例如:
@IBOutlet var landscapeConstraints: [NSLayoutConstraint]!
@IBOutlet var portraitConstraints: [NSLayoutConstraint]!
转到故事板,切换到您想要在iPad纵向方向上发生的自适应布局,并控制从每个ACTIVE约束拖动到portraitConstraints IBOutlet。 将自适应布局更改为您想要为横向发生的布局,并再次控制从ACTIVE约束拖动到landscapeConstraints IBOutlet。
在视图控制器覆盖viewWillTransitionToSize
方法中:
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
let transitionToLandscape = size.width > size.height
let constraintsToUninstall = transitionToLandscape ? ortraitConstraints : landscapeConstraints
let constraintsToInstall = transitionToLandscape ? landscapeConstraints : portraitConstraints
view.layoutIfNeeded()
coordinator.animateAlongsideTransition({
_ in
NSLayoutConstraint.deactivateConstraints(constraintsToUninstall)
NSLayoutConstraint.activateConstraints(constraintsToInstall)
self.view.layoutIfNeeded()
}, completion: nil)
}
//扩展,约束示例:
转到任何大小的类并查看约束中的一些将被重新绑定,这意味着它们在此处不活动但在不同的大小类中是活动的,例如任何常规类。
//扩展
要设置初始方向,您可以覆盖viewWillAppear并安装/卸载正确的约束:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
let transitionToLandscape = view.frame.size.width > view.frame.size.height
let constraintsToUninstall = transitionToLandscape ? portraitConstraints : landscapeConstraints
let constraintsToInstall = transitionToLandscape ? landscapeConstraints : portraitConstraints
view.layoutIfNeeded()
NSLayoutConstraint.deactivateConstraints(constraintsToUninstall)
NSLayoutConstraint.activateConstraints(constraintsToInstall)
}