在UITableViewCell中绘制文本

时间:2013-05-14 07:20:47

标签: iphone ios objective-c xcode drawrect

我使用以下方法在我的客户单元格中绘制文本,它工作正常,但我发现文本的一部分缺失(未显示单元格中的所有文本):

- (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];


}

谢谢,请指教。

4 个答案:

答案 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   对准。

我没有看到你在绘制之前得到上下文。因此它没有有效的上下文。因此没有绘制