尝试创建边距时,UILabel textRectForBounds无效

时间:2011-02-05 13:06:50

标签: iphone ios uilabel margins

我正在尝试缩进UILabel中的文本,在显示背景颜色的文本周围留下一些边距。根据建议here,我已经覆盖textRectForBounds:limitedToNumberOfLines:,如此:

- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines
{
    CGRect intermediate = CGRectMake(bounds.origin.x+MARGIN,bounds.origin.y+MARGIN,bounds.size.width-2*MARGIN,bounds.size.height-2*MARGIN);
    return [super textRectForBounds:intermediate limitedToNumberOfLines:numberOfLines];
}

但无论我做什么,文字都会紧贴矩形的左边界。看起来好像绘图忽略了返回的CGRect的原点部分(尽管它似乎是在考虑宽度部分,好像我将中间的宽度减少到例如bounds.size.width-200,textRectForBounds返回的矩形适当地变窄了文本是在一个很长的小列中绘制的。)

那么:我需要对UILabel做些什么来使绘图尊重textForRectBounds - return-rect的origin.x和origin.y?如果我能提供帮助,我宁愿不覆盖UILabel的{​​{1}}。

更新:这是很久以前的事了,我不记得为什么其他问题对我不起作用。我相信这是因为我试图让drawTextInRect有多行,而解决方案here在这种情况下不起作用。

2 个答案:

答案 0 :(得分:8)

我认为你应该像这样覆盖textRectForBounds:limitedToNumberOfLines:drawTextInRect:

- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines
{
    return CGRectInset(bounds, MARGIN, MARGIN);
}

- (void)drawTextInRect:(CGRect)rect
{
    [super drawTextInRect: CGRectInset(self.bounds, MARGIN, MARGIN)];
}

答案 1 :(得分:0)

查看文档,它可能会有所帮助。对super的调用可能不会返回你假设的值。

  

您不应该调用此方法   直。这种方法应该只是   被想要的子类覆盖   改变接收者的界限   执行任何其他之前的矩形   计算。使用中的值   numberOfLines参数限制   返回的矩形的高度为   指定的文本行数。   要调用此方法,请执行此操作   必须事先调用sizeToFit   或sizeThatFits:方法。注意   UITableViewCell对象中的标签是   根据单元尺寸确定尺寸,   而不是要求的尺寸   这个的默认实现   方法返回原始边界   矩形。

祝你好运!