我有一个UILabel,背景颜色为绿色。但它非常密切地包含了文本。我需要绿色背景比文字宽一点,大约5点。我怎样才能做到这一点?
详情
标签在故事板中创建,并具有水平间距约束。我可以忽略这些约束,因为我已经处理了任何宽度。
建议的要求
我想我需要一个可以在UILabel的子类中覆盖的方法,将其宽度增加5点。谁知道我应该采用哪种方法?
答案 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
的子类并覆盖intrinsicContentSize
和sizeThatFits
以达到您想要的效果。
所以,比如:
- (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);