提问人:ximmyxiao 提问时间:11/19/2014 更新时间:11/24/2014 访问量:11562
如何在XIB中根据子视图的大小调整超级视图的高度?
How to adjust super view 's height base on subview's size in XIB?
问:
在 xcode 6 中,我为自定义视图(命名为:ViewA,得到一个红色背景色)创建一个 xib,而 ViewA 的 xib 得到一个文件大小为 600*600,在 ViewA 中,我在其中放置了一个子视图标签 B(得到一个绿色背景色),并且 labelB 的 numberOfLines = 0 ,所以 labelB'height 是可变的,我希望 ViewA 的高度根据 labelB 的高度改变(例如 ViewA.bottom = labelB.bottom + 10), 并且我已经将标签 B 的顶部、底部、尾随、指向 ViewA,但它仍然不起作用,ViewA 的高度始终为 600,无论标签的高度是什么。如何在自动布局中实现此目标?谢谢
答:
使用自动布局,您需要执行以下操作:
确保您没有向任何子视图添加固定的宽度和/或高度约束(具体取决于您要动态调整大小的尺寸)。这个想法是让每个子视图的内在内容大小决定子视图的高度。带有 4 个自动隐式约束,这些约束将(优先级小于 Required)尝试将标签的框架保持在适合所有文本所需的确切大小。
UILabel
确保每个标签的边缘都刚性地连接到彼此的边缘及其上视图(具有必需的优先级约束)。你要确保,如果你想象其中一个标签的大小越来越大,这将迫使其他标签为它腾出空间,最重要的是,也会迫使超级视图也扩大。
仅向上视图添加约束以设置其位置,而不是大小(至少,不是您希望其动态调整大小的尺寸)。请记住,如果正确设置了内部约束,则其大小将由所有子视图的大小决定,因为它的边缘以某种方式连接到它们的边缘。
请确保在应用任何约束之前更改为视图的属性值。
translatesAutoresizingMaskIntoConstraints
NO
就是这样。你不需要调用或让它工作,只需加载你的视图并设置文本,就应该就是这样了。系统布局引擎将为您进行计算以解决约束条件。(如果有的话,您可能需要调用 superview...但这不应该是必需的。sizeToFit
systemLayoutSizeFittingSize:
setNeedsLayout
您可以在此处查看原始答案
评论
view.translatesAutoresizingMaskIntoConstraints = NO
评论