Многоточие в конце UITextView - PullRequest
       12

Многоточие в конце UITextView

8 голосов
/ 18 августа 2011

Если у меня есть многострочный UITextView без прокрутки, текст которого длиннее, чем может поместиться в видимой области, то текст просто обрезается так:

Congress shall make no law respecting 
an establishment of religion, or 

Как заставить текст отображаться с многоточием там, где обрезка текста, вот так

Congress shall make no law respecting
an establishment of religion, or … 

Эта возможность есть и у других элементов управления, например надписей и кнопок.

Ответы [ 3 ]

6 голосов
/ 18 августа 2011

Почему бы не использовать UILabel для установки numberOfLines на что-то подходящее и получить эту функциональность бесплатно?

4 голосов
/ 18 августа 2011

UITextView предназначен для прокрутки, когда строка больше, чем может показать представление.Убедитесь, что вы правильно установили атрибуты привязки и автоматического изменения размера в коде или в xib.

Вот пример из сообщения в блоге о том, как реализовать свой собственный многоточие.

@interface NSString (TruncateToWidth)
- (NSString*)stringByTruncatingToWidth:(CGFloat)width withFont:(UIFont *)font;
@end

#import "NSString+TruncateToWidth.h"

#define ellipsis @"…"

@implementation NSString (TruncateToWidth)

- (NSString*)stringByTruncatingToWidth:(CGFloat)width withFont:(UIFont *)font
{
  // Create copy that will be the returned result
  NSMutableString *truncatedString = [[self mutableCopy] autorelease];
  // Make sure string is longer than requested width
  if ([self sizeWithFont:font].width > width)
  {
    // Accommodate for ellipsis we'll tack on the end
    width -= [ellipsis sizeWithFont:font].width;
    // Get range for last character in string
    NSRange range = {truncatedString.length - 1, 1};

    // Loop, deleting characters until string fits within width
    while ([truncatedString sizeWithFont:font].width > width) 
    {
      // Delete character at end
      [truncatedString deleteCharactersInRange:range];
      // Move back another character
      range.location--;
    }

    // Append ellipsis
    [truncatedString replaceCharactersInRange:range withString:ellipsis];
  }

  return truncatedString;
}

@end
2 голосов
/ 15 апреля 2016

Кто-то только что показал мне, что это действительно легко сделать с помощью UITextView на iOS 7 и выше:

UITextView *textView = [UITextView new];
textView.textContainer.lineBreakMode = NSLineBreakByTruncatingTail;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...