6

我正在尝试缩进 UILabel 中的文本,以便在显示背景颜色的文本周围留出一些边距。按照这里的建议,我已经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-200textRectForBounds 返回的矩形适当窄并且文本绘制在一根又长又细的柱子)。

那么:我还需要做什么UILabel才能使绘图尊重textForRectBounds-returned-rect 的 origin.x 和 origin.y?如果我能提供帮助,我宁愿不覆盖UILabel's 。drawTextInRect

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

4

2 回答 2

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)];
}
于 2011-02-05T18:36:52.580 回答
0

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

您不应直接调用此方法。此方法只能被想要在执行任何其他计算之前更改接收器的边界矩形的子类覆盖。使用 numberOfLines 参数中的值将返回的矩形的高度限制为指定的文本行数。要调用此方法,必须事先调用 sizeToFit 或 sizeThatFits: 方法。请注意,UITableViewCell 对象中的标签的大小是基于单元格尺寸的,而不是请求的大小。此方法的默认实现返回原始边界矩形。

祝你好运!

于 2011-02-05T18:44:33.160 回答