首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iPad的自适应布局

iPad的自适应布局
EN

Stack Overflow用户
提问于 2015-06-01 07:51:27
回答 1查看 744关注 0票数 5

我跟随这篇文章在ios 构建iOS 8的自适应用户接口中构建自适应布局。

它将在iPhones上很好地工作。现在我不想对iPad产生同样的影响。但是对于iPad来说,自适应布局是行不通的。

以下是iPhone5 中应用程序的屏幕截图(绿色框表示view1,黄色框表示view2)

1.纵向模式

  1. 景观模式

问题:如何为iPad实现相同的效果?

扩展问题:如何在景观模式下建立iPad的初始定位?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-01 08:03:24

iPad的问题是这两个方向都表示为正则的。

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

代码语言:javascript
复制
@IBOutlet var landscapeConstraints: [NSLayoutConstraint]!
@IBOutlet var portraitConstraints: [NSLayoutConstraint]!

转到故事板,切换到您希望在iPad纵向定向中发生的自适应布局,并从每个活动约束拖到portraitConstraints IBOutlet。将Adaptive更改为您希望发生的布局,然后再次控制拖动,将其从仅活动的约束拖到landscapeConstraints IBOutlet。

视图控制器重写viewWillTransitionToSize方法:

代码语言:javascript
复制
    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并安装/卸载正确的约束:

代码语言:javascript
复制
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)
    }
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30568281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档