2011-08-02 33 views
3

是否有任何方法可以确定在给定空间中可以渲染多少NSString?确定使用NSString绘制/尺寸方法绘制的子字符串

我知道所有的NSString sizeWithFont方法(例如sizeWithFont:constrainedToSize:lineBreakMode :)。如果字符串太长而不适合,它们不会告诉你字符串的哪一部分能够被渲染。

举例来说,如果我有

NSString *testString = @"The brown dog"; 

我呼吁:

[testString sizeWithFont:[UIFont systemFontOfSize:17] constrainedtoSize:CGSizeMake(20, 20) lineBreakMode:UILineBreakModeWordWrap]; 

我可以拿回CGSize = {} 20,20。这告诉我字符串至少需要整个尺寸,但它并不告诉我它是否结束,或者能够适合多少。如果只有“棕色”能够适应,我想知道这一点。

也许一些核心基金会的方法来做到这一点?

回答

1

判断是否要截断的一种方法是在约束矩形中提供非常大的高度。如果返回的高度高于标签的高度,则知道它会被截断。类似这样的:

// myLabel is a UILabel* 
    CGSize labelSize = myLabel.frame.size; 
    labelSize.height = 9999; 
    CGSize newSize = [newLabel sizeWithFont:[UIFont systemFontOfSize:17.0] 
          constrainedToSize:labelSize 
           lineBreakMode:UILineBreakModeWordWrap]; 
    if(newSize.height > labelSize.height) { 
     // Whoops, too big! 
    } 

这会告诉你它是否会被截断,但它不会告诉你它会有多少。我认为只有这样做才可以做到这一点,每次都要删除一个字,直到它合适。

+0

对不起,应该早一点回复了。你所说的第一部分并不完全适用于我之后的内容,但循环的建议与我们最终所做的一致。基本上,我们刚刚开始时的尺寸很大,并且执行了或多或少的二分查找以找到最适合的最长字符串。 – DougW