【问题标题】:Truncate an NSString to fit a size? [duplicate]截断 NSString 以适应大小? [复制]
【发布时间】:2013-01-10 23:56:49
【问题描述】:

可能重复:
Measuring the pixel width of a string in Objective C

我使用 [string drawInRect:] 方法,并希望将字符串截断为适合该大小的最大长度。这并不像找出每行有多少个字符那么简单,因为每个字母的宽度都不同。我想找到字符串不再可见的原因是我可以在字符串的末尾添加省略号。

【问题讨论】:

  • 标记为重复的问题解释了如何测量 NSString,而不是如何截断它。
  • 这是一种方法:- (NSString *)stringByTruncatingToWidth:(CGFloat)width attributes:(NSDictionary *)textFontAttributes { CGSize size = [self sizeWithAttributes:textFontAttributes]; if (size.width <= width) { return self; } for (int i = 2; i < self.length; i++) { NSString *testString = [NSString stringWithFormat:@"%@…", [self substringToIndex:self.length - i]]; CGSize size = [testString sizeWithAttributes:textFontAttributes]; if (size.width <= width) { return testString; } } return @""; }

标签: iphone ios objective-c nsstring


【解决方案1】:

查看NSString Additions ReferencedrawInRect:withAttributes: 的文档。在“常量”下,您会找到一个自动执行所需操作的选项:

NSStringDrawingTruncatesLastVisibleLine 如果文本不适合指定的边界,则截断省略号并将其添加到最后一个可见行。

【讨论】:

    【解决方案2】:

    如果@Mundi 给出的解决方案不够,或者你需要知道文本适合多少,你可以使用。

    - (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size
    

    在一个循环中减小文本的大小直到合适为止。

    【讨论】:

      【解决方案3】:

      你想在哪里使用这个字符串?如果它在 UILabel 中,则可以使用 NSLineBreakMode = NSLineBreakByTruncatingTail。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-21
        • 1970-01-01
        • 2013-12-25
        • 1970-01-01
        • 2021-08-05
        • 2012-03-18
        相关资源
        最近更新 更多