XJo*_*nes 1 ios autolayout nslayoutconstraint
考虑以下所需的布局.请注意,这不是"布局字符串",而是图片的代理.所以| = superview边缘, - =空间,[xxx] =视图.
| - [LABEL1] - [标签2 --------------] - [按钮] - |
上面的布局是我想要实现的.用英语讲:
label1 大小适合内容,并从超视图的边缘填充label2label1根据可用的水平空间从边缘填充并展开/收缩button大小适合内容,并从superview的边缘label2和右边缘填充我希望这很清楚.我当前的约束定义为:
[NSLayoutConstraint
constraintsWithVisualFormat:@"H:|-8-[label1]-4-[label2]-4-[button]-8-|"
options:0
metrics:nil
views:views];
Run Code Online (Sandbox Code Playgroud)
这导致以下布局:
| - [LABEL1 ----------------------] - [标签2] - [按钮] - |
问:我怎么能修改约束,以便label2按比例尺寸和label和button的大小以适合的内容?
如果有帮助,这里是创建上述样本生成的约束的等效代码.
NSLayoutConstraint *c1 = [NSLayoutConstraint
constraintWithItem:self.label1
attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:self
attribute:NSLayoutAttributeLeading
multiplier:1.0f
constant:8.0f];
NSLayoutConstraint *c2 = [NSLayoutConstraint
constraintWithItem:self.label2
attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:self.label1
attribute:NSLayoutAttributeTrailing
multiplier:1.0f
constant:4.0f];
NSLayoutConstraint *c3 = [NSLayoutConstraint
constraintWithItem:self.button
attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:self.label2
attribute:NSLayoutAttributeTrailing
multiplier:1.0f
constant:4.0f];
NSLayoutConstraint *c4 = [NSLayoutConstraint
constraintWithItem:self
attribute:NSLayoutAttributeTrailing
relatedBy:NSLayoutRelationEqual
toItem:self.button
attribute:NSLayoutAttributeTrailing
multiplier:1.0f
constant:8.0f];
Run Code Online (Sandbox Code Playgroud)
@ ilya的答案是部分解决方案.它确实不会label1扩展,但label2仍然可以扩展到我想要的区域button,并且`按钮可以被压缩.经过一些试验和错误以及阅读所有文档后,我发现了一个更好,更合适的解决方案.乐趣学习自动布局.
而不是指定最小宽度label1,这有点人为,并且还根据视图内容留下其他问题,更好的解决方案是为所有视图设置contentCompressionResistancePriority和contentHuggingPriority.
只要我还添加以下内容,我的问题中显示的约束也能很好地工作:
[self.label1
setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh
forAxis:UILayoutConstraintAxisHorizontal];
[self.label1
setContentHuggingPriority:UILayoutPriorityDefaultLow
forAxis:UILayoutConstraintAxisHorizontal];
[self.label2
setContentCompressionResistancePriority:UILayoutPriorityDefaultLow
forAxis:UILayoutConstraintAxisHorizontal];
[self.label2
setContentHuggingPriority:UILayoutPriorityDefaultHigh
forAxis:UILayoutConstraintAxisHorizontal];
[self.button
setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh
forAxis:UILayoutConstraintAxisHorizontal];
[self.button
setContentHuggingPriority:UILayoutPriorityDefaultLow
forAxis:UILayoutConstraintAxisHorizontal];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3768 次 |
| 最近记录: |