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

How to know a UIComponent width at runtime?

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

然后我把这个组件放在故事板的一个视图中,设置它的约束:

所以通常情况下,红色矩形的宽度值会根据设备宽度而有所不同。

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

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

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

帮助将不胜感激:)

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

例如你应该做这样的事情

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

使元素占据其父视图宽度的 50%

然后,如果你想改变它,你应该用一个新的约束替换旧的约束,当然,新的乘数。存在这种带有替换的洗牌,因为乘数 属性 是 get only

顺便说一句,如果您想更改组件内每个元素占用的宽度百分比,我的回答是针对这种情况的。如果比例始终相同 (50% 25% 25%),则在组件更改其大小时无需更改约束。所有与组件大小限制相关的元素也会更改它们的大小(如果您通过限制更改组件的大小)

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

(抱歉有 2 个答案 ^^ 它们太不同了)