如何在 swift xcode 故事板中正确使用纵横比?

How to correctly use aspect ratio in swift xcode storyboard?

我整天都在为这件事绞尽脑汁。我试图让 iphone 6s 反映 iphone 12 显示的内容。我不擅长自动布局,但我只是想要一个想法或一个正确方向的观点,这样我就可以让它看起来像它的对应物。感谢所有帮助。

(P.S 我正在使用故事板,但从未尝试以编程方式进行。)

感谢所有帮助。

如果您想使用情节提要来处理这个问题,这就是所有限制的游戏。

有多种方法可以实现此目的UI。您可以使用 UICollectionView 并使用 UICollectionViewCells 在每列中显示 2 个单元格来管理数据,或者您可以使用 UIStackView 轻松管理您的 UI。

如果您想要方形,则必须使用 UIScrollView,因为 UI 可以超过屏幕高度。如果没有,只需将您的视图放入 UIStackView 并让它自己处理您的一些 UI 约束。

总体思路...

  • 使用包含 3“行”水平堆栈视图的垂直堆栈视图
  • 每个水平堆栈视图包含两个“tile”UIViews
  • 在所有堆栈视图上设置 Alignment: FillDistribution: Fill EquallySpacing: 0
  • 给第一个视图(在这个图像中,红色视图)一个宽高比约束......从你的图像来看,它看起来像你想要的 3:2.5
  • 将堆栈视图嵌入“容器”UIView - 我称之为 GridView
  • 在所有 4 个边上限制堆栈视图 >= 12
  • 在所有 4 个边上约束堆栈视图 = 12,但给出这些约束 Priority: High (750) ... 这将导致自动布局为“将堆栈视图拉到边缘,但如果需要允许它变窄
  • 然后我们给堆栈视图中心垂直和水平约束
  • 将 GridView 限制为零前导、尾随和底部

这将为您提供 6 个图块,这些图块将根据设备尺寸保持其纵横比,并且如果需要,它会将垂直堆栈视图居中:

下一步是在每个“平铺”视图中嵌入一个“圆角边框”视图,将其限制在所有 4 个边上的 8 磅(或多或少以获得您想要的“间距”):

这是 iPhone 12 和 iPhone 6s 的结果:

如您所见,标签与横幅和网格视图之间的垂直 较少 space,水平 稍微多一些 space 在堆栈视图的两侧。

这是故事板源代码的 link 和我为此使用的 class 文件,因此您可以尝试一下并检查元素。我用的只是足以证明。您可能想要制作一个包含圆角边框视图和标签的自定义“平铺”视图 class:

https://gist.github.com/DonMag/8a0b2d85bbbb4262e43d73e745826ee5