关于ios:如何将UILabel强制比其应有的宽度要宽5点?

How can I enforce an UILabel to be wider than it should be, by 5 points?

我有一个UILabel,它的背景色为绿色。但是它非常紧密地包裹了文字。我需要绿色背景比文字略宽一点,大约5点。我该如何实现?

详细信息

标签在情节提要中创建,并且具有水平间距约束。我猜您可以忽略约束,因为我已经处理了任何宽度。

建议要求

我想我需要一个可以在UILabel的子类中覆盖的方法,以将其宽度增加5点。有人知道我应该重写哪种方法吗?


您可以尝试将UILabel类的子类化并覆盖下面的方法-

1
2
3
4
- (void)drawTextInRect:(CGRect)rect {
    UIEdgeInsets insets = {0, 5, 0, 5};
    [super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)];
}

希望这对您有帮助!


最后,我解决了我的问题!这样很好-

制作UILabel的子类,并覆盖intrinsicContentSizesizeThatFits以实现所需的内容。

因此,类似:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- (CGSize) intrinsicContentSize
{
    return [self addHorizontalPadding:[super intrinsicContentSize]];
}

- (CGSize)sizeThatFits:(CGSize)size
{
    return [self addHorizontalPadding:[super intrinsicContentSize]];
}

- (CGSize)addHorizontalPadding:(CGSize)size
{
    if (size.width > 0)
        return CGSizeMake(size.width + (2*kSomeHorizontalPaddingValue), size.height);
    else
        return size;
}

请注意,这仅涉及水平填充,但显然可以进行修改以添加垂直填充。


您可以通过首先调用sizeToFit来实现,它将缩小框架并适合文本,然后可以将宽度增加10个像素,并记住保持其居中对齐。

希望有帮助。.让我知道...:)


我认为以下代码将为您服务

1
2
3
CGFloat width =  [label.text sizeWithFont:[UIFont systemFontOfSize:22 ]].width;

label.frame = CGRectMake(point.x, point.y, width+5,height);