Количество строк в UILabel

У меня есть UITableView с пользовательскими ячейками, которые содержат uilabels. Я использую его для показа комментариев, и он должен иметь гибкую высоту. Как мне это сделать? У меня есть код, который подсчитывает количество строк с помощью длины uilabel.text, но это неверный путь. У вас есть идеи?

Используйте UILabel с номеромOfLines, установленным на ноль.

Затем, чтобы убедиться, что ваш ярлык действительно помещается в ячейку, получите размеры из расширения NSString UIKit, как это;

CGFloat cellWidth = 320.0f; //example width.... labelSize = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(cellWidth, FLT_MAX)]; 

Из ссылки NSString; sizeWithFont: constrainedToSize:

Возвращает размер строки, если она была отображена и ограничена указанным размером.

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

Параметры font Шрифт, используемый для вычисления размера строки. size Максимально допустимый размер для строки. Это значение используется для вычисления разрывов строк и их обертывания. Возвращаемое значение Ширина и высота ограничивающего прямоугольника результирующей строки.

Создайте метод класса класса ячеек комментариев, который вычисляет высоту текста, необходимого для высоты ячейки. Также создайте метод класса, который возвращает шрифт по умолчанию для ячейки, поэтому вы всегда можете рассчитать правильную высоту ячейки в layoutSubviews ячейки и в методах cellHeightForRowAtIndexPath UITableViewDelegate.

например

 +(UIFont *) defaultCommentFont { return [UIFont italicSystemFontOfSize:13]; } +(CGSize) sizeOfComment:(NSString *)commentText maxWidth:(CGFloat)maxWidth { return [commentText sizeWithFont:[[self class] defaultCommentFont] constrainedToSize:CGSizeMake(maxWidth, MAX_FLOAT)]; } - (void)layoutSubviews { [super layoutSubviews]; static CGFloat margin = <# margin #>; CGSize commentSize = [[self class] sizeOfComment:self.commentText maxWidth:self.contentView.frame.size.width - 2 * margin]; self.commentLabel.frame = CGRectMake(margin, margin, commentSize.width, commentSize.height); } 

( извините, если в коде есть ошибки – с использованием только анализатора на основе глаз;) )

При этом, когда вы пытаетесь вернуть правильную высоту ячейки в методе UITableViewDelegate, вам не нужно использовать метод cellForRowAtIndexPath: поскольку в некоторых случаях это может привести к неконтролируемой рекурсии, приводящей к переполнению стека.

И, как сказал Тилл, установите для свойства numberOfLines значение 0 .

  • Как отладить iOS 7.1 симулятор на Xcode 7?
  • Core Plot - метка графика выходит за пределы границы
  • Ошибка: «Невозможно вызвать значение нефункционного типа» в Swift 3
  • Предупреждение о неиспользуемой переменной в XCode 6
  • Ошибки, связанные с Linker Linker в XCode 6.1.1
  • Возможно ли имитировать контакты, отличные от локальных, в симуляторе IOS
  • Почему сбой SKAction.playSoundFileNamed?
  • Создание фреймворка для iOS в XCode 4.2
  • Показать / скрыть элементы пользовательского интерфейса в раскадровке в зависимости от цели
  • Номера против имени проекта в лог-тексте iOS
  • ViewController не будет обновляться после загрузки
  • Interesting Posts

    Загрузите PDF в UIWebView и получите ошибку DiskImageCache: Не удалось разрешить абсолютный путь старого каталога

    Какая ошибка может вернуть извлечения данных ядра?

    Как записать файл mp4 с помощью AVCaptureSession?

    libobjc.A.dylib at objc_msgSend: 15 crash

    Графики: Отключение / Скрытие первой точки узла в линейной диаграмме

    Добавление UISegmentedControl в UISearchBar вместо кнопок Scope

    Может ли NSTimer использовать несколько селекторов?

    Как открыть URL-адрес документа по умолчанию для ios APP с использованием пакета 3?

    Файл RevMobAds / RevMobAds.h не найден

    Что является более эффективным способом предотвращения двойного срабатывания?

    iOS добавляет представление Button в IB

    добавление ActivityIndicator при загрузке многих файлов iPhone

    не поддерживает ли сетевые устройства при загрузке @ 2x изображений при установке из AppStore?

    Как изменить автоматизацию для конкретного контроллера из Interface Builder?

    Типы наследования поддерживаются в Swift

    Давайте будем гением компьютера.