如何使用 NSLayoutConstraint 限制 UIButton 的高度
Posted
技术标签:
【中文标题】如何使用 NSLayoutConstraint 限制 UIButton 的高度【英文标题】:How to restrict UIButton height using NSLayoutConstraint 【发布时间】:2016-02-11 13:17:57 【问题描述】:我有 UItoolbar
,其中添加了两个项目 1.UITextView
和 2.UIButton
。
UITextview
的属性是根据输入的文本自动增长。
在增加UITextview
的高度时,我想限制UIButton
的高度,即不应该增加UIButton
的高度。
[_toolbar setItems:[NSArray arrayWithObjects:barButtonItemCommentText,barButtonItemSubmit,nil]];
submitBtn.translatesAutoresizingMaskIntoConstraints = NO;
textView.translatesAutoresizingMaskIntoConstraints = NO;
_toolbar.translatesAutoresizingMaskIntoConstraints = NO;
[_toolbar addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-8-[textView]-79-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(textView)]];
[_toolbar addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-8-[textView]-8-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(textView)]];
[_toolbar addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[submitBtn]-8-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(submitBtn)]];
[_toolbar addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-8-[submitBtn]-8-|" options:NSLayoutFormatAlignAllBaseline metrics:nil views:NSDictionaryOfVariableBindings(submitBtn)]];
[_toolbar addConstraint:[NSLayoutConstraint constraintWithItem:submitBtn
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:60]];
[textView setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal];
[textView setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
[_toolbar setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
[_toolbar addConstraint:[NSLayoutConstraint constraintWithItem:_toolbar attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationLessThanOrEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0f constant:MaxToolbarHeight]];
有关参考,请参阅随附的屏幕截图:
【问题讨论】:
也许将这一行[_toolbar addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-8-[submitBtn]-8-|" options:NSLayoutFormatAlignAllBaseline metrics:nil views:NSDictionaryOfVariableBindings(submitBtn)]];
更改为 [_toolbar addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|->=8-[submitBtn]-8-|" options:NSLayoutFormatAlignAllBaseline metrics:nil views:NSDictionaryOfVariableBindings(submitBtn)]];
非常感谢@Dima,你让我很开心。:)
【参考方案1】:
下面提到的约束是让它在垂直方向上拉伸,因为它要求从顶部和底部始终保持 8 个像素。
[_toolbar addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-8-[submitBtn]-8-|" options:NSLayoutFormatAlignAllBaseline metrics:nil views:NSDictionaryOfVariableBindings(submitBtn)]];
如果将其更改为恒定高度,则它不会垂直增长,在这种情况下,高度始终为 24。
[_toolbar addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[submitBtn(24)]-8-|" options:NSLayoutFormatAlignAllBaseline metrics:nil views:NSDictionaryOfVariableBindings(submitBtn)]];
【讨论】:
我发现我的问题评论中的答案和您的答案都是完美的。谢谢甘道夫和迪玛。以上是关于如何使用 NSLayoutConstraint 限制 UIButton 的高度的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 中为 NSLayoutConstraint 设置动画?
如何在 swift 中使用 NSLayoutConstraint 根据屏幕大小更改设计
如何以编程方式更改或更新 NSLayoutConstraint