确定使用NSString绘制/大小方法绘制的子字符串

时间:2011-08-02 23:52:51

标签: iphone cocoa-touch nsstring core-foundation

是否有任何方法可以确定在给定空间中可以渲染多少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}。这告诉我字符串至少占据了整个尺寸,但它并没有告诉我它是否已经结束,或者它能够适应多少。如果只有“棕色”能够适应,我想知道。

也许有一些Core Foundation方法可以做到这一点?

1 个答案:

答案 0 :(得分: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!
    }

这会告诉你它是否会被截断,但它不会告诉你它有多少。我能想到的唯一方法是在循环中执行此操作,每次删除一个单词,直到它适合。