我正在尝试设置以下布局(所有垂直居中,所以我忽略了这个方面):
| Label btn View |
|-10-|-----X-----|-10-|--30--|-10-|---Y---|-10-|
A B C D E F G H
[view]
按钮宽度固定(30)。根据其他一些因素,我在运行时向[view]
添加了不同的子视图。不同的子视图具有不同的宽度。
我希望Y
按照添加的子视图的宽度进行缩放(最好相应地响应更改)。
我希望X
占用空间的剩余部分,从而使整个集合填充超级视图的宽度。
〜
我正在尝试使用故事板工具来解决这个问题(在运行时操纵约束和框架会使这个问题变得不同,对我来说更容易)。
我目前将间距设置为:
子视图的布局如下:
|-10-|-fixed width button-|-10-|-fixed width button-|- (no constraint) -|
还尝试过:
|-10-|-fixed width button-|-10-|-fixed width button-|-10-|
(这导致子视图的大小正确,但[view]
只占用了拥抱UILabel内容大小后留下的任何空间。)
我尝试更改视图的内容拥抱和阻力属性(认为这是关键),但我可以实现的唯一结果是:
具体来说,我使View的内容拥抱和压缩属性大于标签的内容,认为这会导致它拥抱内容,但我最终将标签缩小到内容的宽度和视图采取余下的。我已经阅读了这个Cocoa Autolayout: content hugging vs content compression resistance priority,但要么误解了它,要么在我的解决方案中考虑其他问题。
如果它有所不同,Label会运行两行(有时)。
答案 0 :(得分:0)
来自@rdelmar的一些提示(谢谢!)。我设法找到了一个我非常满意的解决方案。
基本上,看起来我无法在故事板中执行此操作,子视图不会通过代码添加超级视图。
所以我需要添加一些约束,并且至关重要(以避免它与子视图对事物的原始理解相冲突:
[subview setTranslatesAutoresizingMaskIntoConstraints:NO];
NSMutableArray * constraints = [NSMutableArray array];
[constraints addObject:[NSLayoutConstraint constraintWithItem:subview
attribute:NSLayoutAttributeLeft
relatedBy:NSLayoutRelationEqual
toItem:view
attribute:NSLayoutAttributeLeftMargin
multiplier:1.0
constant:0]];
[constraints addObject:[NSLayoutConstraint constraintWithItem:subview
attribute:NSLayoutAttributeRight
relatedBy:NSLayoutRelationEqual
toItem:view
attribute:NSLayoutAttributeRightMargin
multiplier:1.0
constant:0]];
[view addConstraints:constraints];
如果有人能够解释这个答案,或者确实有所改进(例如仅限故事板)那么我认为这个世界会更好。