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

时间:2014-01-01 23:05:10

标签: ios objective-c uilabel autolayout sizetofit

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

我正在将UILabel放到UIView上,我正在安排我的自动布局约束,以便标签的centerX =父视图的centerX。我没有给标签赋予任何宽度约束。当我在运行时设置标签的文本时,标签的绘制范围足够宽,以使文本适合,左侧和右侧没有边距/填充。我想要的是在左侧和右侧有一些填充,以便文本不会从标签开始的地方开始。实现这一目标的黑客可能是将文本设置为@“text”,但当然这不是可行的方法:)

我如何实现我的目标?

4 个答案:

答案 0 :(得分:30)

您可以自己扩展UILabel并覆盖intrinsicContentSize。请确保您也设置了textAlignment = NSTextAlignmentCenter。

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

这可能仅在您只显示一行文字时才有效。

答案 1 :(得分:7)

您可以创建UILabel子类并覆盖intrinsicContent,

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

这将在宽度上添加20点的填充。如果您希望文本位于中间,请务必将文本对齐设置为居中。

答案 2 :(得分:4)

如果您正在使用自动布局,则可以设置水平约束并使用NSDictionary参数中的metrics动态设置此值。

例如,如果您想为UIButton的内部内容添加10pt填充,则可以执行以下操作:

NSDictionary *padding = @{ @"padding" : @(button.intrinsicContentSize.width + 20) };
NSArray *buttonHConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[button(==padding)]|" options:0 metrics:padding views:NSDictionaryOfVariableBindings(button)];

答案 3 :(得分:1)

如果您尝试为UILabel提供与其父视图不同的颜色,则需要将UILabel包含在UIView中,并使用填充和所需的背景颜色。 如果您的UILabels背景颜色与其父视图相同,那么我不明白这个问题只是使用自动布局来指定相对于它旁边的东西需要多少空间。