gpt4 book ai didi

ios - 适用于 iPad 的自适应布局

转载 作者:搜寻专家 更新时间:2023-10-30 23:02:17 27 4
gpt4 key购买 nike

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

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

enter image description here

  1. 横向模式
    enter image description here

问题:如何在iPad上实现同样的效果?
扩展问题:如何设置 iPad 横屏初始方向?

最佳答案

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

其中一个解决方案是将两个 IBOutlet 集合添加到您希望发生方向更改的 View Controller 中,例如:

@IBOutlet var landscapeConstraints: [NSLayoutConstraint]!
@IBOutlet var portraitConstraints: [NSLayoutConstraint]!

转到 Storyboard,切换到您希望在 iPad 纵向方向上发生的自适应布局,并控制从每个 ACTIVE 约束拖动到 portraitConstraints IBOutlet。将 Adaptive Layout 更改为您想要的横向布局,并再次控制从 ACTIVE 约束到 landscapeConstraints IBOutlet 的拖动。

在 View Controller 中覆盖 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

转到 any-any size class 并查看约束,其中一些将被 gay 掉,这意味着此处不活跃但将在不同的 size classes 中活跃,例如 any-regular。

//展开

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

关于ios - 适用于 iPad 的自适应布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30568281/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com