如何为不同设备自动布局应用程序。
Posted
技术标签:
【中文标题】如何为不同设备自动布局应用程序。【英文标题】:How to auto layout an app for different devices. 【发布时间】:2017-06-03 16:54:30 【问题描述】:为此问题的基本性质提前道歉。我很高兴被重定向到此问题的先前已回答版本,但尚未找到。
我刚刚完成了我的第一个应用程序的大部分工作,我担心我可能以错误的方式设置它。
我的应用在 iphone7 上看起来“不错”,但是当我将设备更改为 7+ 时,视图控制器的底部和右侧边缘有空白空间,当我在 iphone 5 上运行它时,视图不适合。
有没有办法让我的应用程序的视图自动拉伸/压缩到任何设备?或者,这种方式是否比我预期的更复杂?我想相信有一个简单的解决方案,但我还没有找到。
谢谢!
【问题讨论】:
您的标题说明了一切,您想使用自动布局!这方面有很多教程:) 【参考方案1】:好的,所以这对你来说将是一项漫长的任务。我将列出您需要学习的主题以使其正确。
-
堆栈视图
内容拥抱优先级/抗压缩优先级
限制优先级
不同 UI 元素的大小类
有用的链接:
-
Autolayout 一些奥秘的官方教程(Part 1 和Part 2)。
Autolayout 上的官方 Guide。
其他在线资源
正如 J. Doe 正确提到的,答案就在你的问题中
【讨论】:
谢谢。该视频有助于我获得所需的信息:youtube.com/watch?v=RH_Ye-8ii8E&t=45s 这篇文章将使您更好地了解自动布局的工作原理slicode.com/…【参考方案2】:如果你只支持人像模式那么。
首先选择一个基本布局进行设计。因为你选择了iphone 7。 我选择iphone 7 plus。
创建一些常量。
为什么?
要创建一个纵横比以乘以您在 iphone 7 布局中绘制的每个约束的常量值。以便根据设备正确计算。
像这样。
var SCREEN_WIDTH = UIScreen.main.bounds.size.width
var SCREEN_HEIGHT = UIScreen.main.bounds.size.height
var BASE_SCREEN_HEIGHT:CGFloat = 736.0
var SCREEN_MAX_LENGTH = max(SCREEN_WIDTH, SCREEN_HEIGHT)
var ASPECT_RATIO_RESPECT_OF_7P = SCREEN_MAX_LENGTH / BASE_SCREEN_HEIGHT
你也可以使用我的。如果您的基本布局是 iphone 7Plus。
这个怎么用?
假设您在 iphone 7 plus 中为标签绘制了一个大约 10 的顶部约束。 然后制作一个函数并像这样在 viewDidLoad 中调用它以支持纵向模式的所有设备。
func updateConstraint()
topConstantOfYourLabel.constant = 10*ASPECT_RATIO_RESPECT_OF_7P
如果您支持横向模式
-
如果您想更改横向布局,则需要针对横向进行设计。由于您的大多数网点只是在这里和那里移动,您只需要更改左上右下约束。因此,在这种情况下,请卸载之前的约束并安装另一个约束,并使其仅适用于该 size 类。
有很多关于自适应布局的在线教程like this.
如果你不想改变布局但根据纵横比正确计算,那么有一个在定位期间触发的功能。
覆盖 func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator 协调器: UIViewControllerTransitionCoordinator) 如果 UIDevice.currentDevice().orientation.isLandscape.boolValue 打印(“风景”) imageView.image = UIImage(named: const2) 别的 打印(“肖像”) imageView.image = UIImage(named: const)
在该函数中应用逻辑以支持所有设备:)
【讨论】:
谢谢。该视频有助于我获得所需的信息:youtube.com/watch?v=RH_Ye-8ii8E&t以上是关于如何为不同设备自动布局应用程序。的主要内容,如果未能解决你的问题,请参考以下文章