我对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_SIZE
是15
,在其他地方定义。
任何人都知道为什么会这样?
答案 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] ];