Swift - 自动布局 - UIView - 内部尺寸混淆

标签 swift autolayout view scaling sizing

当使用自动布局时,我很困惑如何设置我的 View 的大小,更重要的是,我的标签/按钮/图像的大小。

我看过几十个网页的观点。许多人说,如果我正确使用自动布局,我就不需要明确说明我的 View 对象的大小。然而,自动布局似乎几乎要求明确的尺寸限制!如果我不给它们,自动布局会说我的图像和 View 大小“不明确”。

我还想知道当我的约束加载到视网膜显示器上时自动布局会做什么。我的 300x90 图片会突然变小一半吗?我从顶部固定 70 的 View 现在会被导航栏覆盖吗?大多数自动布局教程都侧重于如何使用约束,而不是我的 300x90 图像将如何被不同设备上的 iOS 操作。

看起来,如果他们希望 View 流畅,那么我应该指定百分比,而不是具体的像素测量值!

谁能帮助我更好地理解我的观点将如何放大和缩小?

最佳答案

I have read dozens of webpages perspectives. Many say that if I am using auto layout correctly, I should not need to explicitly state the size of my view objects. Yet, auto layout seems to almost demand exactly that, explicit size constraints! If I do not give them, auto layout says my image and view sizes are "ambiguous".

在这里区分普通 View 和 ScrollView 很重要。对于普通 View ,您可以布置您的内容并将您的 View 限制在 super View 的边缘或周围的 View 中,这很有效。

对于 ScrollView ,自动布局必须能够计算 contentView 的大小。这可以通过两种方式之一完成。您要么 1) 显式设置 contentView 的宽度和高度,在这种情况下,您现在可以将 contentView 视为普通 View 并相应地对其进行布局,或者 2) 显式调整和约束 contentView 中的所有对象,这样contentView 的大小可以根据它包含的对象的大小来计算。换句话说,您要么固定 contentView 的大小以便 AutoLayout 可以放置其他项目,要么固定项目的大小以便 Auto Layout 可以计算 contentView 的大小。

I would also like to know what auto layout will do when my conatraints are loaded on a retina display. Will my 300x90 image suddenly be half the size? Will a view I pin 70 from the top now be covered by a navigation bar? Most auto layout tutorials focus on how to use constraints, not how my 300x90 image will be manipulated by the iOS on different devices.

约束以点而不是像素为单位。您的 300x90 图片是 300 点 x 90 点。它将针对所有设备调整大小。如果您为 @2X 和 @3X 提供额外的图像 Assets ,它甚至会为每个设备使用正确的图像。

It seems like, if they wanted the view to be fluid then I should be specifying percents, not specific pixel measurements!

您可以使用约束的乘数 属性来实现百分比。例如,如果您希望图像宽度为 super View 宽度的 50%,请在 ImageView 与其 super View 之间设置一个等宽约束,然后更改乘数0.5

关于Swift - 自动布局 - UIView - 内部尺寸混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28795193/

相关文章:

iOS Autolayout 将高度约束设置为零会导致布局无效

ios - 为什么自动布局约束不是相对于 UIViewController View 的框架

ios - 自动布局以编程方式修改约束乘数

mysql - 将 SQL 更新语句转换为 View 语句

swift - 无法转换 UIButton 类型的值 : Swift

ios - 更改 View Controller 维护导航层次结构

swift - 为 A 到 Z UITableView 滚动添加部分索引标题

arrays - 在字符串中逐字搜索

ios - Swift 使用注释标注调用 segue

android - 如何在 Android ScrollEvent 上有选择地重绘 View ?