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

dam*_*ian 6 iphone margins uilabel ios

我试图缩进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];
}
Run Code Online (Sandbox Code Playgroud)

但无论我做什么,文本都会紧贴矩形的左边界.好像绘图忽略了返回的CGRect的原点部分(虽然它似乎是在考虑宽度部分,好像我减少到中间的宽度,例如bounds.size.width-200textRectForBounds返回的矩形适当地缩小并且文本被绘制成一个很瘦的专栏).

那么:我需要做些什么UILabel来使绘图尊重textForRectBounds-returned-rect的origin.x和origin.y?我宁愿不重写UILabeldrawTextInRect,如果我能帮助它.

更新:这是很久以前的事了,我不记得为什么另一个问题不适合我.我相信这是因为我试图拥有UILabel多行,而这里的解决方案并不适用.

Cos*_*que 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)];
}
Run Code Online (Sandbox Code Playgroud)