IOS, how to truncate with ellipsis the last visible line of a paragraph?

I want to draw a paragraph (so I think using CTFrameDraw or ctlinedraw), but I also need to crop the text if it does not fit in a certain area (rect). Usually we trim the last line by adding an ellipsis (ie the characters "..."). How to do it? How to do this with a special char like '... [+]'

In addition, I would like to know how to specify the indentation (in pixels) for the very first line, and if possible define a custom linepacing

and to finish, I need to know the exact final rectangle that will correspond to the exact full paragraph (it may be lower than a certain area)

+5
source share
2 answers

Copy the following code in viewDidLoad into a test project.

 // Set the size of the area the paragraph will be drawn in. CGSize sizeOfTextArea = CGSizeMake(200.0f, 100.0f); // Sample text and views. NSString *text = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur."; UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, sizeOfTextArea.width, sizeOfTextArea.height)]; imageView.backgroundColor = [UIColor whiteColor]; [self.view addSubview:imageView]; self.view.backgroundColor = [UIColor blackColor]; CGRect textRect = imageView.frame; UIButton *moreBtn = [UIButton buttonWithType:UIButtonTypeCustom]; moreBtn.frame = CGRectMake(CGRectGetMaxX(textRect)-45, CGRectGetMaxY(textRect), 45, 20); [moreBtn setTitle:@"more" forState:UIControlStateNormal]; [self.view addSubview:moreBtn]; // Create a paragraph style and add it to attributed text options. NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; style.firstLineHeadIndent = 10.0f; // <- CHANGE THIS TO ADJUST INDENT style.lineSpacing = 10.0f; // <- CHANGE THIS TO ADJUST LINE SPACING NSDictionary *attributes = @{NSParagraphStyleAttributeName : style}; // Render the text // The options set the text to word-wrap and to add an ellipsis if needed. UIGraphicsBeginImageContext(sizeOfTextArea); NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:text attributes:attributes]; [attributedText drawWithRect:CGRectMake(0, 0, sizeOfTextArea.width, sizeOfTextArea.height) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingTruncatesLastVisibleLine context:nil]; UIImage *renderedText = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); // Display the rendered text. imageView.image = renderedText; // Calculate the rect for the full text. We fix the width and let iOS calculate the height. CGRect fullTextRect = [attributedText boundingRectWithSize:CGSizeMake(sizeOfTextArea.width, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading context:nil]; NSLog(@"full rect: %@", NSStringFromCGRect(fullTextRect)); // Show/hide more button depending on whether there more text to show moreBtn.hidden = CGRectGetHeight(fullTextRect) <= sizeOfTextArea.height; 

As for the [+] after the ellipse, add a more button instead of the text that is displayed or hidden, depending on whether more text is displayed (see the code above to see what I mean).

0
source
  NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init]; paragraph.lineBreakMode = NSLineBreakByTruncatingTail; [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraph range:NSMakeRange(0, [attributedString length])]; descriptionLabel.attributedText = attributedString; 

Use the above code and your UIelement shortcut or such a .U button will receive ellipses in the last line. And I'm also trying to add a line to the end, but I didnot. because in a limited area, the label shows usability information for hiding only. In this line, in addition to ellipses, I tried some text. Please provide less information.

0
source

All Articles