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

Swift - Auto layout - UIView - Intrinsic Size Confusion

使用自动布局时,我对如何设置我的视图以及更重要的 labels/buttons/images 的大小感到困惑。

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

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

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

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

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".

这里区分普通视图和滚动视图很重要。对于普通视图,您可以布置您的内容并将您的视图限制在超级视图的边缘或周围视图,这很有效。

对于滚动视图,自动布局必须能够计算 contentView 的大小。这可以通过两种方式之一完成。您要么 1) 显式设置 contentView 的宽度和高度,在这种情况下,您现在可以将 contentView 视为普通视图并相应地对其进行布局,或者 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 提供额外的图像资源,它甚至会为每个设备使用正确的图像。

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

您可以使用约束的乘数属性来实现百分比。例如,如果您希望图像宽度为超级视图宽度的 50%,请在图像视图与其超级视图之间设置 Equal Widths 约束,然后更改 乘数0.5.