根据情节提要中的设备边界而变化的约束

Posted

技术标签:

【中文标题】根据情节提要中的设备边界而变化的约束【英文标题】:Constraints that changes depending on the device bounds in storyboards 【发布时间】:2018-05-03 04:41:42 【问题描述】:

是否可以创建 constraints(顶部、前导、尾随、底部),根据设备 widthheight 仅使用 Storyboard 更改其常量?

PS:我不想添加任何额外的views,只是为了计算正确的新constraint

【问题讨论】:

是的,您可以这样做。首先您需要将视图的常量设置为与超级视图(即窗口)相同,然后您只需将乘数从 0.1 更改为 1.0。希望这将有助于实现你想要的 你能给出更多解释吗?将视图的常量设置为与父视图相同是什么意思。 您是否希望实现视图之间的相对间距? 是的,我想根据设备的边界改变间距 【参考方案1】:

我知道这样做的一个 hacky 方式,我不知道这是否正是您要寻找的,但您可以通过设置视图顶部相对于中间的位置来相对间隔视图的superview。

为了做到这一点,你必须使用乘数并将分母用作(height of the canvas)/2 分子可以在0 - size of canvas 之间移动,并且它应该相对于超级视图定位。

可以做同样的事情来定位它的 x 轴。

您可以使用这些值来实现您的目标。

【讨论】:

谢谢你的回答,我知道这可以解决问题,但这不是我真正想要的,我以前使用过这个解决方案,我觉得它很棘手。我知道每个约束都符合这个公式:A1 = A2 * M + C 所以我想创建一个约束,其中: - A1:顶部属性 - A2:高度属性(超级视图) - M:乘数 = 0.2 - C:常数= 0 啊,我试着找到类似的东西-_-,这是我能做的最好的了,对不起朋友。【参考方案2】:

Apple 提供了大小类,可以根据设备的大小自动调整约束和更新视图/常量。

请检查您的相关问题及其答案here

【讨论】:

我不明白你是如何为标签选择乘数的值的。 如果您想进行比例布局,则使用乘数。例如。如果您有超级视图(顶部、前导、尾随和底部约束)并且您在其中使用超级视图的一半大小的子视图,那么您的子视图宽度和高度约束的乘数将为 0.5 或 1:2。这适用于任何尺寸的设备。 这真的很有帮助,但是如果标签在视图内,这个解决方案就不起作用,这是我发现自己最常见的情况,因为否则我总是可以使用计算填充您添加的附加视图,这就是我现在正在做的事情。【参考方案3】:

使用大小类概念

这已经在 ios 8 中引入了

https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/Size-ClassSpecificLayout.html

【讨论】:

感谢您的回答,但我的目标是,例如:我希望我的顶部约束等于超级视图高度的一半。我认为对于 size 类,我需要为每类设备提供不同的常量,这不是我想要做的。 对不起,我误解了你的问题。

以上是关于根据情节提要中的设备边界而变化的约束的主要内容,如果未能解决你的问题,请参考以下文章

故事板中的 UIView 边界在代码中没有改变

约束更新后,UIView的边界何时发生变化?

如何仅使用一个情节提要为所有 iPhone 设备设计自动布局约束?

如何在情节提要中使用自动布局在不同设备尺寸上设置动态位置的约束

如何根据自适应布局和情节提要使 uitableviewcell 中的 uilabel 相对于设备进行包装

模拟器中的 UIView 边界/绘图不正确