适应iPad的自适应布局

我正在关注这篇文章,在ios中构build适应性布局, 为iOS 8构build自适应用户界面 。

它将在iPhone上正常工作。 现在我不想给iPad一样的效果。 但对于iPad自适应布局是行不通的。
这里是iPhone5中的应用截图(绿框代表view1,黄框代表view2)
1.肖像模式

在这里输入图像说明

  1. 风景模式
    在这里输入图像说明

问题 :iPad如何能达到同样的效果?
展开的问题:如何在横向模式下设置iPad的初始方向?

iPad的问题是两个方向都表示为Regular。

其中一个解决scheme是将两个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) } 

//扩展,约束示例:

在这里输入图像说明

去任何规模的class级,看看这个约束,其中一些会被约束掉,这意味着在这里没有活动,但是会在不同的规模class上活跃起来,例如任何正常的class级。

/ /扩大

要设置初始方向,您可以覆盖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) }