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

时间:2015-06-03 06:17:25

标签: ios objective-c uilabel uistoryboard nslayoutconstraint

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

详情

标签在故事板中创建,并具有水平间距约束。我可以忽略这些约束,因为我已经处理了任何宽度。

建议的要求

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

4 个答案:

答案 0 :(得分:3)

您可以尝试对UILabel类进行子类化并覆盖以下方法 -

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

希望这会对你有所帮助!

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

最后我解决了我的问题!它的效果很好 -

创建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;
}

请注意,这只会触及水平填充,但显然可以修改以添加垂直填充。

答案 3 :(得分:0)

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

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

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