我使用以下方法在我的客户单元格中绘制文本,它工作正常,但我发现文本的一部分缺失(未显示单元格中的所有文本):
- (void)drawContentView:(CGRect)rect {
UIColor * textColor = [UIColor blackColor];
if (self.selected || self.highlighted){
textColor = [UIColor whiteColor];
}
else
{
[[UIColor whiteColor] set];
UIRectFill(self.bounds);
}
[textColor set];
UIFont * textFont = [UIFont systemFontOfSize:16];
CGSize textSize = [text sizeWithFont:textFont constrainedToSize:rect.size];
[text drawInRect:CGRectMake(self.frame.size.width-(textSize.width+2 ) ,
(rect.size.height / 2) - (textSize.height / 2),
textSize.width, textSize.height) withFont:textFont lineBreakMode:NSLineBreakByWordWrapping alignment:NSTextAlignmentRight];
}
谢谢,请指教。
答案 0 :(得分:1)
尝试使绘图空间大于textSize.width, textSize.heigh
UIFont * textFont = [UIFont systemFontOfSize:16];
CGSize sizeMe = CGSizeMake(300, rect.size.height*1.5);
CGSize textSize = [text sizeWithFont:textFont constrainedToSize:sizeMe];
[text drawInRect:CGRectMake(self.frame.size.width-(textSize.width+10 ) ,
(rect.size.height / 2) - (textSize.height / 2),
textSize.width, textSize.height+(textSize.height*1.5)) withFont:textFont lineBreakMode:NSLineBreakByWordWrapping alignment:NSTextAlignmentRight];
答案 1 :(得分:0)
也许您应该将确定文字大小的行更改为:
CGSize textSize = [text sizeWithFont:textFont constrainedToSize:rect.size lineBreakMode: NSLineBreakByWordWrapping];
答案 2 :(得分:0)
您没有考虑sizeWithFont中的lineBreakMode。您可能希望使用– sizeWithFont:constrainedToSize:lineBreakMode:
来确定实际大小。
BTW,当你的约束正好是rect.size时,返回值永远不会大于实际的rect.size。那可能就是你想要的。每当我在自定义单元格中处理可变长度的字符串时,我想知道字符串是否适合并且可以扩大单个单元格(当然,这需要更多的工作)。
如果这样做,那么将约束大小的size.height
设置为非常高的值。 10000.0f
左右。
答案 3 :(得分:0)
您正在创建一个自定义单元格。是否需要将文本绘制到其中?这就是Label添加为子视图并使用它的目的。
drawInRect是一种核心图形绘制方法
根据文档
使用指定的方法在当前图形上下文中绘制字符串 边界矩形和字体。此方法绘制尽可能多的字符串 尽可能使用给定的字体和约束。这个方法使用了 UILineBreakModeWordWrap换行模式和UITextAlignmentLeft 对准。
我没有看到你在绘制之前得到上下文。因此它没有有效的上下文。因此没有绘制