[英]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.