IOS / Autolayout可能只是顶视图而无需设置子视图?

时间:2017-05-01 13:55:25

标签: ios view autolayout

我使用针对iPhone SE(或5)优化的尺寸检查器,在不使用主要依赖硬编码尺寸的自动布局的情况下制作应用程序原型。

我这样做的主要原因是缺乏自动布局的知识以及在进行此更改后重做约束的难度。

我现在面临的问题是,适用于SE的应用程序屏幕大小不足以填满iPhone 6或特别是7 +的空间。屏幕在顶部和底部留下不同大小的黑色边框,具体取决于SE与其他目标之间的差异。

每个屏幕的元素通常包含在每个视图控制器的一个视图中。

我想知道是否有任何方法可以设置一些约束来扩展主视图以调整到手机屏幕大小而不需要视图中每个元素的约束?

如果没有,我会咬紧牙关并开始接受几十个限制,但想知道是否有可能采用极简主义方法。

2 个答案:

答案 0 :(得分:0)

实际上有一种称为UIViewAutoresizing的方法,但它严格依赖于布局。
参考:https://developer.apple.com/reference/uikit/uiview/1622559-autoresizingmask

答案 1 :(得分:0)

因为你决定坚持使用autolayout ......

想象一下,你在场景中有很多UI元素(让我们在其他场景中说一些)并且首先你没有设置任何约束。

一开始你对所有/或几乎所有元素 autolayout都不满意。这是因为你没有设置任何东西(没有约束/自动调整掩码等)。因此,在运行时/屏幕尺寸变化等过程中对旋转/移动的反应几乎不可预测 每个人(我们只是称之为“反应”)。

如何解决?我们知道有一个名为“约束"。

解决方案

约束在两个元素(不是3,4或...... n - 很多)之间设置了关系,其公式为 UIView.attribute1 = multiplier * UIView2.attribute2 + constant B

让我们从第一个UI元素(你的SomeView - 让我们称之为View1)开始,它是Superview的子元素。 一开始你对它的反应不满意。因此,您为该特定元素设置约束。你在场景上布局它。

现在你有了新的关系

  • UIView1.attribute = UIViewNth.attributeN + B
    //实际上是UIView1.attribute1 = Superview.attribute2 + B

仅在2个元素之间设置 :superview和 ONE (不是很多)特定元素(我们刚刚调用View1的SomeView)。 //(您为 ONE 特定元素设置布局/约束 - View1 - 这是“SomeView"”。

你为其中两个实现了解决方案(实际上是一个,没有考虑Superview, - 对于someView,它是场景的superView的子视图)。 现在你可以分别预测SomeView对Superview的反应

所有其他 UIElement的反应仍然仍然无法预测。所有其他UI元素彼此无关及其中任何一个。为其中任何一个(其余UI元素)设置无布局

你有1个正常工作。仍不满意?

所以,让我们走得更远

现在为第二个 ONE 特定元素设置约束。你通过制作现在介于第二个和Superview /或你场景中已经粘贴的某个其他第n个UI元素之间的关系来布局它(与某个地方相关),所以第二个将粘贴到第n个一个他们不会一起移动/崩溃/等。第1次坚持第2次,第2次到第3次等。

所以现在你有新关系

  • UIView2.attribute3 = Uiview1.attribute4 + A(A是一些值)。 //或UIView2.attribute3 = Superview.attribute4 + A(某个值)。

现在,您可以预测第二个UI元素的反应。它与第一元素的反应

或者使用带有第一元素的Superview /或(已经坚持超级视图)。由你决定。

此时你已经完全

  • [Superview] - [View1]关系/你为第一个([Superview] - [View1])做了布局1视图/设置约束

  • [View1] - [View2]关系/您为第二个([View2] - [View1])布局了第二个视图/设置约束

场景中所有剩余的 3 ... n 元素仍然不可预测。我们称之为 k ... n ,其中 n是最后一个。不满意?

现在,您可以像之前一样设置第k个 元素的布局。您场景中的 k-1 UI元素 仍然不满意

......等等

在场景中重复到第n个(最后一个)UI元素

回答您的问题。没有。如果您有许多UI元素并希望在运行时能够使大部分内容做出正确反应,那么就没有简短的(少数约束方法)解决方案。