如何使用 NSLayoutConstraint 限制 UIButton 的高度

Posted

技术标签:

【中文标题】如何使用 NSLayoutConstraint 限制 UIButton 的高度【英文标题】:How to restrict UIButton height using NSLayoutConstraint 【发布时间】:2016-02-11 13:17:57 【问题描述】:

我有 UItoolbar,其中添加了两个项目 1.UITextView 和 2.UIButtonUITextview 的属性是根据输入的文本自动增长。 在增加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

如何检查 NSLayoutConstraint 是不是动画

如何在 swift 的扩展中声明 NSLayoutConstraint 类型的变量

如何创建返回 NSLayoutConstraint 的函数