如何为UILabel的内在内容大小添加填充?

21

我正在iOS7上使用自动布局,遇到了这样的问题:

我把UILabel放在UIView上,并排列我的自动布局约束,使标签的centerX = 父视图的centerX。 我没有给标签任何宽度约束。 当我在运行时设置标签的文本时,标签的绘制宽度刚好足以适应文本,左右两侧没有任何间距/填充。 我想要的是在左右两侧有一些填充,以便文本不会从标签开始就出现。 为了实现这个目的,可以通过将文本设置为@" text "来进行调整,但当然这不是正确的方法 :)

我该怎么做才能达到我想要的效果呢?

4个回答

34

您可以扩展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)
}

当您只需要显示一行文本时,这可能仅适用。


7

您可以创建一个UILabel子类并覆盖intrinsicContent属性,

-(CGSize)intrinsicContentSize {
    CGSize s = [super intrinsicContentSize];
    s = CGSizeMake(s.width + 20, s.height);
    return s;
}

这将在宽度上增加20个点的填充。如果您希望文本居中,请确保将文本对齐设置为居中。


3
如果您正在使用自动布局,可以设置水平约束并在“度量”参数中使用NSDictionary来动态设置它。例如,如果您想给UIButton的内部内容添加10pt的填充,则可以执行以下操作:
NSDictionary *padding = @{ @"padding" : @(button.intrinsicContentSize.width + 20) };
NSArray *buttonHConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[button(==padding)]|" options:0 metrics:padding views:NSDictionaryOfVariableBindings(button)];

1
如果您想为UILabel设置与其父视图不同的颜色,则需要将UILabel包含在具有所需填充和背景颜色的UIView中。 如果您的UILabel的背景颜色与其父视图相同,则我不理解问题,只需使用自动布局指定您想要的相对空间即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接