我跟随这篇文章在ios 构建iOS 8的自适应用户接口中构建自适应布局。
它将在iPhones上很好地工作。现在我不想对iPad产生同样的影响。但是对于iPad来说,自适应布局是行不通的。
以下是iPhone5 中应用程序的屏幕截图(绿色框表示view1,黄色框表示view2)
1.纵向模式


问题:如何为iPad实现相同的效果?
扩展问题:如何在景观模式下建立iPad的初始定位?
发布于 2015-06-01 08:03:24
iPad的问题是这两个方向都表示为正则的。
解决方案之一是将两个IBOutlet集合添加到视图控制器中,您希望在其中发生这个方向更改,例如:
@IBOutlet var landscapeConstraints: [NSLayoutConstraint]!
@IBOutlet var portraitConstraints: [NSLayoutConstraint]!转到故事板,切换到您希望在iPad纵向定向中发生的自适应布局,并从每个活动约束拖到portraitConstraints IBOutlet。将Adaptive更改为您希望发生的布局,然后再次控制拖动,将其从仅活动的约束拖到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)
}https://stackoverflow.com/questions/30568281
复制相似问题