我有一个UIComponent,这是一个简单的视图(我缩小了问题)。 这是xib和类:
然后我将此组件放在故事板的视图中,设置其约束:
通常情况下,红色矩形的宽度值不同,具体取决于设备宽度。
在图形上就是这种情况,组件正确调整自身大小,但是当我调用函数来打印它的宽度时,结果总是相同的,无论启动应用程序的设备如何。
实际上,该值始终是故事板中组件的实际宽度。
这太奇怪了。 有没有办法知道UIComponent的实际宽度?
非常感谢帮助:)
答案 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个答案^^他们太差异了)