Iphone UILabel textRectForBounds在尝试创建边距时无效

Iphone UILabel textRectForBounds在尝试创建边距时无效,iphone,ios,uilabel,margins,Iphone,Ios,Uilabel,Margins,我试图在UILabel中缩进文本,以便在显示背景颜色的文本周围留一些空白。根据建议,我重写了textRectForBounds:limitedToNumberOffline:如下: - (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines { CGRect intermediate = CGRectMake(bounds.origin.x+MARGIN,bounds

我试图在UILabel中缩进文本,以便在显示背景颜色的文本周围留一些空白。根据建议,我重写了
textRectForBounds:limitedToNumberOffline:
如下:

- (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的原始部分(尽管它似乎是关于宽度部分的,好像我将中间宽度减少到eg
bounds.size.width-200
textRectForBounds返回的矩形适当地窄,并且文本绘制在一个细长的列中)

那么:我还需要对
UILabel
做些什么才能使绘图尊重
textForRectBounds
-返回的rect的origin.x和origin.y?如果我能帮上忙的话,我宁愿不要覆盖
UILabel
drawTextInRect


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

我认为您应该覆盖
textRectForBounds:LimitedToNumberLines:
drawTextInRect:
,如下所示:

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

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

查看文档,可能会有所帮助。调用super可能不会返回您假定的值

您不应该调用此方法 直接的。此方法仅适用于 被希望 更改接收器的边界 在执行任何其他操作之前,单击矩形 计算。使用中的值 numberOfLines参数以限制 返回的矩形到的高度 指定的文本行数。 对于要调用的此方法,有 必须事先致电sizeToFit 或sizeThatFits:method。注意 UITableViewCell对象中的标签是 根据单元格尺寸调整大小, 而且不是要求的尺寸 此函数的默认实现 方法返回原始的边界 矩形


祝你好运

你试过直接返回
中间行吗?是的,但没有什么区别。谢谢,这很有效(或多或少):我不得不对矩形宽度进行一些调整,以使其在多行中正常工作,但我最终还是成功了。如果你这样做(为了匹配UITextView)您可能还希望像这样覆盖sizeThatFits:-(CGSize)sizeThatFits:(CGSize)size{CGSize fSize=[super-sizeThatFits:size];fSize.width+=2*边距;fSize.height+=2*边距;return fSize;}对我不起作用,它仍然不会被调用。实际上,文档不正确,
limitedtonomberofline:0
。传入的
边界
有一个
高度
,看起来像
INT\u MAX\u值
或其他什么,默认实现似乎将其降低到足够高的rect,以适合文本。