簡體   English   中英

如何在第x行修剪NSString?

[英]How do I trim an NSString at line x?

這應該是一個簡單的問題。 我試圖將NSString修剪為最大高度不超過150px的任何文本,然后將“ Continue Reading”附加到該修剪的文本的末尾。

a
b
c
d
e
f
g
h
i
j
k
l
m

我們有一個說13的字體...我們計算了總的文本高度,發現13px字體的高度超過150px。 我的問題是,如何切割超過150px的字符串部分?

你可以用

- (CGSize)sizeWithFont:(UIFont *)font forWidth:(CGFloat)width lineBreakMode:(NSLineBreakMode)lineBreakMode

(在iOS7上最好使用boundingRectWithSize:options:attributes:context: :)

while (size.height<150.0f)繼續向字符串添加一行。

編輯 :此示例可以工作:(注意:如果不使用ARC,trimmedStr應該會自動發布!)

- (NSString*) stringByTrimmingString:(NSString*)str forSize:(CGSize)maxSize withFont:(UIFont*)font
{
    NSMutableString* trimmedStr = [NSMutableString new];
    for (NSString* line in [str componentsSeparatedByString:@"\n"]) {

        NSString *testStr = [trimmedStr stringByAppendingFormat:@"%@\n",line];

        CGSize sz = [testStr sizeWithFont:font forWidth:maxSize.width lineBreakMode:NSLineBreakByWordWrapping];
        if (sz.height > maxSize.height) {
                return [trimmedStr copy];
        }
        [trimmedStr appendFormat:@"%@\n",line];
    }
    return [trimmedStr copy];
}

我做了一些相當愚蠢的事情(蠻力),以在我的應用程序中完成此任務。 我在UILabel中手動創建換行符和縮進。 為此,我在文本中找到第一個空格(以獲取第一個單詞的結尾),檢查是否超出了我的范圍。 如果沒有,我將移至第二個空間並進行檢查。

為了給您做些更聰明的事情,我將您的字符串分成兩半,然后看看這一半是否超出了您的范圍。 如果是,則轉到1/4,否則轉到3/4並進行檢查。 然后,一旦找到使您超出限制的字符,然后向后搜索空格(以找到適合的最后一個單詞)並在其中截斷字符串。 這看起來像是困難的代碼,但就像二進制搜索算法一樣,但是通過您的字符串。

您可以簡單地使用

-(CGSize)sizeWithFont:(UIFont*)font forWidth:(CGFloat)width lineBreakMode:(NSLineBreakMode)lineBreakMode;

因為它考慮了所有\\ n字符並計算出正確的CGSize。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM