2011-08-02 57 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