在自定义UITableViewCell中收缩自定义textLabel和detailTextLabel

时间:2011-07-28 02:50:26

标签: ios uitableview textlabel detailtextlabel

我正在使用Loren Brichter's Fast Scrolling script的稍微定制版本,我遇到问题,如果单元格中的标签到达单元格的末尾,则不会停止。当编程表以标准方式查看时,如果textLabelsdetailTextLabels太长,它们会自动切断并在字符串末尾应用三个点以保持在单元格内。

我想做同样的事情,但我不知道如何实现它。这是我在向表格视图单元格添加文本时使用的代码:

CGPoint t;
CGPoint d;

t.x = feedImage.size.width + 10 + 12;
t.y = 20;
[textLabel drawAtPoint:t withFont:textLabelFont];

d.x = feedImage.size.width + 10 + 12;
d.y = 39;
[detailTextLabel drawAtPoint:d withFont:detailTextLabelFont];

2 个答案:

答案 0 :(得分:1)

关注this tutorial。无缝地工作。

答案 1 :(得分:0)

您可以以编程方式找出(使用大约字符宽度),这将是最后两个/三个可见字符。然后删除剩余的字符并自己放三个点!对于大写字符,尝试宽度为16,对于小写字母,宽度为12磅,字体大小为15.通过反复试验找出正确的数字。

确定。这是一个根据字符调整标签高度(给定宽度)的函数。变量“width”是标签的宽度,“tempWidth”是计算的当前行的宽度。您可以修改此函数以返回截断的字符串,并在末尾添加三个点...

#define smallLetterWidth 12
#define capitalLetterWidth 16
-(int) numRowsForString:(NSString *) inputStr width:(int) width{
int j=0;
numRows=1;
int tempWidth = 0;
while(j<[inputStr length]){
    if([[NSCharacterSet uppercaseLetterCharacterSet] characterIsMember:[inputStr characterAtIndex:j]])
        tempWidth += capitalLetterWidth;
    else
        tempWidth += smallLetterWidth;
     if(tempWidth>width){
        tempWidth = 0;
        numRows++;
        j--;
    }
    else if(tempWidth==width)
    {
        tempWidth = 0;
        numRows++;
    }
    j++;
}
return  numRows;
}

更好:What is -[NSString sizeWithFont:forWidth:lineBreakMode:] good for?