Multi-line NSAttributedString with truncated text

2019-01-31 03:46发布

I need a UILabel subcass with multiline attributed text with support for links, bold styles, etc. I also need tail truncation with an ellipsis. None of the open source code that supports attributed text inside UILabels (TTTAttributedLabel, OHAttributedLabel, TTStyledTextLabel) seem to support tail truncation for multi-line text. Is there an easy way to get this?

标签: ios core-text
8条回答
forever°为你锁心
2楼-- · 2019-01-31 04:39

You may be able to use follow code to have a more simple solution.

    // last line.
    if (_limitToNumberOfLines && count == _numberOfLines-1)
    {
        // check if we reach end of text.
        if (lineRange.location + lineRange.length < [_text length])
        {
            CFDictionaryRef dict = ( CFDictionaryRef)attributes;
            CFAttributedStringRef truncatedString = CFAttributedStringCreate(NULL, CFSTR("\u2026"), dict);

            CTLineRef token = CTLineCreateWithAttributedString(truncatedString);

            // not possible to display all text, add tail ellipsis.
            CTLineRef truncatedLine = CTLineCreateTruncatedLine(line, self.bounds.size.width - 20, kCTLineTruncationEnd, token);
            CFRelease(line); line = nil;
            line = truncatedLine;
        }
    }

I'm using MTLabel in my project and it's a really nice solution for my project.

查看更多
Fickle 薄情
3楼-- · 2019-01-31 04:43

Maybe I'm missing something, but whats wrong with? :

NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithString:@"test"];

NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
style.lineBreakMode = NSLineBreakByTruncatingTail;
[text addAttribute:NSParagraphStyleAttributeName
                      value:style
                      range:NSMakeRange(0, text.length)];

label.attributedText = text;

This works perfectly and will add a ellipsis to the end.

查看更多
登录 后发表回答