我创建了一个视图控制器,如下所示:
我希望两个顶部按钮与整个视图的左/右边缘之间始终保持 20 个点。它们也应该始终具有相同的宽度。我已经为所有这一切创建了约束,并且它完全按照我想要的方式工作。问题是垂直限制。按钮应始终位于顶部边缘下方 20 点处。它们应该具有相同的高度。但是,自动布局不考虑左侧标签需要两行来容纳其所有文本,因此结果如下所示:
我希望它看起来像第一张图片中的那样。我无法为按钮添加恒定的高度限制,因为当应用程序在 iPad 上运行时,只需要一行,那么额外的空间就会很浪费。
In viewDidLoad
我试过这个:
- (void)viewDidLoad
{
[super viewDidLoad];
self.leftButton.titleLabel.preferredMaxLayoutWidth = (self.view.frame.size.width - 20.0 * 3) / 2.0;
self.rightButton.titleLabel.preferredMaxLayoutWidth = (self.view.frame.size.width - 20.0 * 3) / 2.0;
}
但这根本没有改变任何事情。
问题:如何使自动布局尊重左侧按钮需要两行?
我遇到了同样的问题,我希望我的按钮与其标题一起增长。我不得不子类化UIButton
和它的intrinsicContentSize
以便它返回标签的固有大小。
- (CGSize)intrinsicContentSize
{
return self.titleLabel.intrinsicContentSize;
}
自从UILabel
是多行的,其intrinsicContentSize
未知,您必须设置它preferredMaxLayoutWidth
请参阅 objc.io 相关文章 https://www.objc.io/issues/3-views/advanced-auto-layout-toolbox/#intrinsic-content-size-of-multi-line-text
- (void)layoutSubviews
{
[super layoutSubviews];
self.titleLabel.preferredMaxLayoutWidth = self.titleLabel.frame.size.width;
[super layoutSubviews];
}
布局的其余部分应该可以工作。如果您将两个按钮设置为相同的高度,则另一个按钮将增长到。完整的按钮看起来像这样
@implementation TAButton
- (instancetype)initWithCoder:(NSCoder *)coder
{
self = [super initWithCoder:coder];
if (self) {
self.titleLabel.numberOfLines = 0;
self.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
}
return self;
}
- (CGSize)intrinsicContentSize
{
return self.titleLabel.intrinsicContentSize;
}
- (void)layoutSubviews
{
[super layoutSubviews];
self.titleLabel.preferredMaxLayoutWidth = self.titleLabel.frame.size.width;
[super layoutSubviews];
}
@end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)