如何为不同设备自动布局应用程序。

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

以上是关于如何为不同设备自动布局应用程序。的主要内容,如果未能解决你的问题,请参考以下文章

如何为动态创建的控件实现自动布局?

如何为通用应用程序制作自动布局

使用自动布局适应所有设备

如何为具有动态高度的表格单元格正确设置自动布局?

带有子视图屏幕的自动布局发出不同的设备

如何为较小的设备更改 UIImageView 的高度?