2015-06-01 87 views
4

我正在关注在ios Building Adaptive User Interfaces for iOS 8中构建自适应布局的这篇文章。iPad的自适应布局

它会在iPhone上正常工作。 现在我不想给iPad带来同样的效果。但对于iPad来说,自适应布局是行不通的。
这里是应用程序的屏幕截图中的iPhone5 (绿色方框代表厂景和黄色框表示视图2)
1.Portrait模式

enter image description here

  • 风景模式
    enter image description here
  • 问题:怎样才能达到相同的效果ct for iPad?
    扩展问题:如何在横向模式下设置iPad的初始方向?

    +0

    看到这个职位http://stackoverflow.com/questions/27067078/ios -autolayout-change-possition-on-rotation/27073472#27073472,如果它可以帮助您 – Sandeep

    回答

    5

    iPad的问题在于两个方向均表示为Regular。

    其中一个解决方案是在两个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) 
    } 
    

    //膨胀,约束例如:

    enter image description here

    转到任何-任何尺寸和类看到约束它们中的一些将是这意味着在这里没有活跃,但会在不同规模的类别中活跃,例如任何常规活动。

    //压缩扩大

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

    我无法找到纵向或横向模式的约束条件。在我的故事板中,共有12个约束,其中8个用于所有设备,4个是卸载约束。请帮助我 –

    +0

    @RizwanShaikh打开故事板并将布局更改为纵向,所有活动约束(不是变灰)都是您应该连接到portraitConstraints的那个,一旦完成后,将故事板更改为显示您的横向布局的视图,并且所有的活动约束条件都应该连接到landscapeConstraints。一些限制条件将与两者相关,但这很好。 – Greg

    +0

    两种情况下的约束都是一样的。因为我正在使用尺寸类 –