这应该是一个简单的问题。我正在尝试将NSString
修剪为最大高度为150px的文本,然后将“继续阅读”添加到该修剪文本的末尾。所以说我们有以下内容。
a
b
c
d
e
f
g
h
i
j
k
l
m
我们有一个字体,13 ...我们计算总文本高度,并看到它在13px字体时超过150px高。我的问题是,如何切割超过150px的字符串部分?
答案 0 :(得分:0)
你可以使用
- (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];
}
答案 1 :(得分:0)
我做了一些非常愚蠢(蛮力)的事情,以便在我的应用中完成这项工作。我在UILabel中手动创建新的行字符和缩进。为此,我找到了文本中的第一个空格(以获得第一个单词的结尾),检查是否超出了我的范围。如果没有,我移动到第二个空格并检查。
要为你做一些更聪明的事情,我会将你的字符串分成两半然后看看那一半是否超出你的界限。如果是,那么转到1/4,如果不是那么转到3/4并检查。然后,一旦找到使你超出限制的角色,然后向后搜索一个空格(找到适合的最后一个单词)并在那里截断你的字符串。这可能看起来像是困难的代码,但它就像二元搜索algorythm,但通过你的字符串。
答案 2 :(得分:0)
您只需使用
即可-(CGSize)sizeWithFont:(UIFont*)font forWidth:(CGFloat)width lineBreakMode:(NSLineBreakMode)lineBreakMode;
因为它会考虑所有\ n字符并计算正确的CGSize。