2

我对 a 进行了分类UILabel,所以我可以TitleLabel在几个地方使用它。这TitleLabel有一个自定义字体。lineheight设置为NSAttributedString.

这是drawTextInRect覆盖方法:

- (void)drawTextInRect:(CGRect)rect {
    self.text = @"THIS IS A TEST";
    NSMutableAttributedString *attStr = [[NSMutableAttributedString alloc] initWithString:self.text];

    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    paragraphStyle.minimumLineHeight = 15.f;
    paragraphStyle.maximumLineHeight = 15.f;

    [attStr addAttribute:NSBackgroundColorAttributeName value:[UIColor yellowColor] range:NSMakeRange(0,7)];
    [attStr addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, self.text.length)];
    [attStr addAttribute:NSFontAttributeName value:[UIFont fontWithName:TITLE_FONT_NAME size:TITLE_FONT_SIZE] range:NSMakeRange(0, self.text.length)];

    self.attributedText = attStr;

    [super drawTextInRect:rect];
}

添加背景颜色用于测试目的。如您所见,黄色背景颜色的位置正确。文本THIS IS应位于黄色背景中,但位于背景上方。 TITLE_FONT_SIZE15,在别处定义。

在此处输入图像描述

有谁知道为什么会这样?

4

1 回答 1

0

您正在更改字体大小,因此如果字体太大,文本会被剪切。这很正常,根据矩形大小更改字体大小。让它变成这样:

[attStr addAttribute:NSFontAttributeName value:[UIFont fontWithName:TITLE_FONT_NAME size: MIN(rect.size.height*0.4,rect.size.width*0.4)] range:NSMakeRange(0, self.text.length)];

编辑

不确定哪个矩形被传递给该方法。文档中没有任何内容,可能是框架而不是视图边界。尝试这个:

[super drawTextInRect: [self convertRect: rect fromView: nil] ];
于 2013-01-23T12:44:00.287 回答