我如何强制 UILabel 比应有的宽 5 点?

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

我有一个 UILabel,它的背景颜色为绿色。但它非常紧密地包裹着文字。我需要绿色背景比文本宽一点,大约 5 磅。我怎样才能做到这一点?

详情

标签是在故事板中创建的,具有水平间距限制。你可以像我猜的那样忽略约束,因为我已经处理了任何宽度。

建议的要求

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

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

希望对您有所帮助..让我知道...:)

您可以尝试子class UILabel class 并重写下面的方法 -

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

希望对您有所帮助!

我认为下面的代码对你有用

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

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

终于解决了我的问题!像这样效果很好 -

创建 UILabel 的子类并覆盖 intrinsicContentSizesizeThatFits 以实现您想要的。

所以,类似于:

- (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;
}

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