NSAttributedString文本位置

时间:2013-01-23 12:33:09

标签: objective-c ios6 nsattributedstring

我对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,在其他地方定义。

enter image description here

任何人都知道为什么会这样?

1 个答案:

答案 0 :(得分: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] ];