如何在运行时知道UIComponent宽度?

时间:2017-01-10 17:07:56

标签: ios swift storyboard width uicomponents

我有一个UIComponent,这是一个简单的视图(我缩小了问题)。 这是xib和类:

enter image description here

然后我将此组件放在故事板的视图中,设置其约束:

enter image description here

通常情况下,红色矩形的宽度值不同,具体取决于设备宽度。

在图形上就是这种情况,组件正确调整自身大小,但是当我调用函数来打印它的宽度时,结果总是相同的,无论启动应用程序的设备如何。

实际上,该值始终是故事板中组件的实际宽度。

这太奇怪了。 有没有办法知道UIComponent的实际宽度?

非常感谢帮助:)

2 个答案:

答案 0 :(得分:1)

最好不要同时使用约束和框架进行标记。坚持约束并对每个元素的宽度做出新的约束。每个元素的宽度应通过乘数与父视图的宽度相关。

例如你应该做这样的事情

NSLayoutConstraint(item: element, attribute: .width, relatedBy: .equal, toItem: parentView, attribute: .width, multiplier: 0.5, constant: 0)

使元素占据其parentView宽度的50%

然后,如果你想改变它,你应该用一个新的约束替换旧的约束,当然新的约束乘以新的期望乘数。这样的替换存在是因为乘数属性只是

顺便说一下,如果你想改变组件中每个元素占用的宽度百分比,我的答案就是这个例子。如果propotions始终相同(50%25%25%),则在组件更改其大小时,无需更改约束。与组件大小约束相关的所有元素也会改变它们的大小(如果通过约束更改组件的大小)

答案 1 :(得分:1)

在设置约束之后但在尝试获取宽度之前,应该在视图上使用layoutIfNeeded()。在激活时不会立即应用约束

(抱歉2个答案^^他们太差异了)