Ios iPad的自适应布局

Ios iPad的自适应布局,ios,swift,ipad,autolayout,size-classes,Ios,Swift,Ipad,Autolayout,Size Classes,我跟随这篇文章在ios中构建自适应布局 它在iPhone上运行良好。 现在,我不想在iPad上产生同样的效果。但对于iPad来说,自适应布局是行不通的。 这是iPhone5中应用程序的屏幕截图(绿色框代表view1,黄色框代表view2) 1.纵向模式 横向模式 问题:iPad如何达到同样的效果? 扩展问题:如何在横向模式下设置iPad的初始方向?iPad的问题是两个方向都表示为常规方向 其中一种解决方案是将两个IBOutlet集合添加到您希望发生此方向更改的视图控制器中,例如: @IBOu

我跟随这篇文章在ios中构建自适应布局

它在iPhone上运行良好。 现在,我不想在iPad上产生同样的效果。但对于iPad来说,自适应布局是行不通的。
这是iPhone5中应用程序的屏幕截图(绿色框代表view1,黄色框代表view2)
1.纵向模式

  • 横向模式
  • 问题:iPad如何达到同样的效果?

    扩展问题:如何在横向模式下设置iPad的初始方向?

    iPad的问题是两个方向都表示为常规方向

    其中一种解决方案是将两个IBOutlet集合添加到您希望发生此方向更改的视图控制器中,例如:

    @IBOutlet var landscapeConstraints: [NSLayoutConstraint]!
    @IBOutlet var portraitConstraints: [NSLayoutConstraint]!
    
    转到情节提要,切换到要在iPad纵向方向上进行的自适应布局,并控制从每个活动约束到纵向约束的拖动。 将自适应布局更改为您希望用于景观的布局,然后再次控制从仅活动约束到景观约束的拖动

    视图中控制器覆盖
    viewwillTransitionOnToSize
    方法:

        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)
    }
    
    //扩展约束,例如:


    转到任意大小的类,并查看约束,其中一些将被忽略,这意味着它们在此处不处于活动状态,但在不同大小的类中处于活动状态,例如任何常规大小的类

    //扩大

    要设置初始方向,您可以覆盖ViewWillDisplay并安装/卸载正确的约束:

    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)
        }
    

    看这篇文章,如果它对你有帮助的话,我无法找到哪种约束适用于纵向或横向模式。在我的故事板中,共有12个约束,其中8个用于所有设备,4个用于卸载约束。请帮忙me@RizwanShaikh打开故事板并将布局更改为纵向,所有活动约束(不是灰显的)都是您应该连接到纵向约束的约束,一旦完成,将故事板更改为显示横向布局的视图,同样,所有活动约束都应连接到景观约束。一些约束将同时连接到两个,但这很好。在两种情况下,约束是相同的。当我使用尺寸类时,转到任何尺寸类,并查看约束,其中一些将被忽略,这意味着它们在这里不活动,但在不同的尺寸类中活动,例如任何常规尺寸。这意味着约束条件不一样,请参见答案后的示例图片。谢谢您的帮助。请编辑答案,并在答案中加入您的最后评论,以便帮助其他人