我正在iOS7上使用自动布局,遇到了这样的问题:
我把UILabel放在UIView上,并排列我的自动布局约束,使标签的centerX = 父视图的centerX。 我没有给标签任何宽度约束。 当我在运行时设置标签的文本时,标签的绘制宽度刚好足以适应文本,左右两侧没有任何间距/填充。 我想要的是在左右两侧有一些填充,以便文本不会从标签开始就出现。 为了实现这个目的,可以通过将文本设置为@" text "来进行调整,但当然这不是正确的方法 :)
我该怎么做才能达到我想要的效果呢?
我正在iOS7上使用自动布局,遇到了这样的问题:
我把UILabel放在UIView上,并排列我的自动布局约束,使标签的centerX = 父视图的centerX。 我没有给标签任何宽度约束。 当我在运行时设置标签的文本时,标签的绘制宽度刚好足以适应文本,左右两侧没有任何间距/填充。 我想要的是在左右两侧有一些填充,以便文本不会从标签开始就出现。 为了实现这个目的,可以通过将文本设置为@" text "来进行调整,但当然这不是正确的方法 :)
我该怎么做才能达到我想要的效果呢?
您可以扩展UILabel并自己覆盖intrinsicContentSize。请确保您还设置了textAlignment = NSTextAlignmentCenter。
-(CGSize)intrinsicContentSize{
CGSize contentSize = [super intrinsicContentSize];
return CGSizeMake(contentSize.width + 50, contentSize.height);
}
Swift 5.0
open override var intrinsicContentSize: CGSize {
let size = super.intrinsicContentSize
return CGSize(width: size.width + 16, height: size.height)
}
当您只需要显示一行文本时,这可能仅适用。
您可以创建一个UILabel子类并覆盖intrinsicContent属性,
-(CGSize)intrinsicContentSize {
CGSize s = [super intrinsicContentSize];
s = CGSizeMake(s.width + 20, s.height);
return s;
}
这将在宽度上增加20个点的填充。如果您希望文本居中,请确保将文本对齐设置为居中。
NSDictionary
来动态设置它。例如,如果您想给UIButton
的内部内容添加10pt的填充,则可以执行以下操作:NSDictionary *padding = @{ @"padding" : @(button.intrinsicContentSize.width + 20) };
NSArray *buttonHConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[button(==padding)]|" options:0 metrics:padding views:NSDictionaryOfVariableBindings(button)];