【问题标题】:Using Auto Layout in Interface Builder with complex views在具有复杂视图的 Interface Builder 中使用自动布局
【发布时间】:2015-03-01 22:59:06
【问题描述】:

所以,这是一个棘手的问题。我正在开发一个应该与 iPhone 4s、5/5s/5c 和 6/6 Plus 兼容的仅纵向应用程序。不幸的是,为了使用户界面与之前列出的设备完全兼容,我在使用自动布局时遇到了一些麻烦。

这是 UI 外观的屏幕截图(来自 iPhone 6 Plus,我将其用作其他屏幕尺寸的参考):

我有一个 338x338 点的蓝色圆圈、一个 180x180 的红色圆圈、一个 118x118 的绿色圆圈、一个 84x84 的紫色圆圈,最后还有一个 50 点高的广告横幅。我想要实现的结果是拥有一个尊重这些视图大小的 iPhone 6 Plus UI,并为所有其他视图提供适当缩小的 UI;除此之外,我会让用户付费删除底部的广告横幅,因此我也需要相应地调整 UI 的大小(设置横幅的垂直间距并将其高度设置为 0?)。我搞砸了 Interface Builder,得到了一个不错的——不是那么精确的——结果。看看 iPhone 4s 屏幕上的 UI:

看起来不错,但有一个大问题。在 Interface Builder 中,我正在开发一个与 iPhone 6 Plus(414 点)宽度相同的 Freeform ViewController,我在其上添加了所有具有先前列出的帧大小的圆形视图。举个例子,让我们暂时忽略所有其他约束,专注于纵横比:在 338x338 blueCircle 上,我添加了纵横比约束,与 180x180 redCircle 相同。然后我控制从 redCircle 拖动到 blueCircle 并再次单击纵横比,以便它根据 blueCircle 调整大小。正如我所说,结果并不精确,因为如果我 println() redCircle 的框架,控制台会说它的宽度等于 175.666666666667(而不是 180)点。

Here's 项目,以便您自己查看。我相信它的价值超过一千字。我不太擅长自动布局,而且我确信我创建了太多无用的约束。我可以做些什么来改进我的布局?

【问题讨论】:

  • 是否必须自动布局?当通过代码布局时,这样的事情似乎要容易得多..但也许这只是我的看法。 - 遗憾的是,我对自动布局也不是很熟悉。
  • 我认为您将需要比 IB 中的自动布局所允许的更多的逻辑。我会弄清楚您可以使用的最简单的约束是什么,然后在加载视图时在代码中调整它们。可以在代码中引用约束,就像使用视图本身一样(控制拖动到代码)。我这样做是为了巧妙地解决一些限制,让事情变得恰到好处。例如,如果您对宽度变成 175.66667 不满意,那么在代码中您可以在进行一些舍入后调整约束。
  • 目前我没有在我的实际项目中使用自动布局。我只是检查视图框架以查看应用程序在哪个设备上运行。当状态栏高度由于后台调用/导航/音频而增加时界面改变其高度时,我对这种方法有一些问题。
  • 看起来自动布局正在正常工作。自动布局的全部意义在于停止根据特定像素考虑设计。红色圆圈不完全是 180 点在功能上真的很重要吗?

标签: ios iphone user-interface interface-builder autolayout


【解决方案1】:

您需要将所有圆形视图的高度和宽度设置为与其父视图成比例。 我将蓝色视图的高度设置为与其父视图成比例的 0.5,其宽度将与自身成 1:1 的纵横比 对所有其他视图重复相同的操作,并根据需要在视图之间应用垂直间距和水平间距

这是它在 iphone 4 上的样子

这就是它在 iphone 6 plus 上的样子

【讨论】:

    猜你喜欢
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多