Измените размер UITextView на размер его текста и уменьшите размер, если он больше высоты

Я пытаюсь сделать табличное представление, похожее на такие приложения, как facebook, где он показывает тексты сообщений, и если сообщение слишком велико, оно уменьшит размер и добавит кнопку «Подробнее». Я рассмотрел множество различных решений для изменения размера UITextViews до высоты их текста, однако ни один из них не решает мою проблему. Моя проблема существует только с большими сообщениями. Когда у меня есть большой пост, моя функция, которая возвращает высоту textView, должна вернуть maxHeight сообщений перед расширением. Эта часть работает. Однако, когда я нажимаю кнопку «Читать дальше», у меня есть огромное количество пробелов в нижней части полного текста. Вот мой код:

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { return heightForTextOfRow(indexPath.row) + PostCell.additionalVertSpaceNeeded } func heightForTextOfRow(row: Int) -> CGFloat { var textView = UITextView(frame: CGRectMake(0, 0, prototypeTextViewWidth, CGFloat.max)) let post = data[row] textView.text = (post.postText as NSString).stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()) textView.textContainer.lineFragmentPadding = 0 textView.textContainerInset = UIEdgeInsetsZero textView.font = PostCell.textViewFont textView.frame.size = textView.sizeThatFits(CGSizeMake(prototypeTextViewWidth, CGFloat.max)) if textView.frame.size.height > maxHeight && !post.seeMore { return maxHeight } else { return textView.frame.size.height } } 

Некоторые объяснения кода:

  • data – массив сообщений (единственное, что имеет отношение к классу Post в этом случае, это то, что у него есть свойство postText и seeMore.)
  • PostCell.textViewFont является константой в одном из моих классов, который возвращает шрифт, который я использую (размер системного шрифта 13)
  • PostCell.additionalVertSpaceNeeded – это константа, которая возвращает высоту всех других элементов в моей ячейке прототипа, за исключением UITextView
  • prototypeTextViewWidth определяется как tableView.frame.width – 16 (16 – значение полей, добавленных вместе)
  • maxHeight – это максимальная высота сообщения, которое не хочет показывать полный пост (в настоящее время определяется как tableView.frame.height * 0.625 – PostCell.additionalVertSpaceNeeded)
  • seeMore – свойство Bool Post, которое сообщает, показывать или не показывать полный пост или показывать только часть сообщения (true показывает полный пост, false показывает сообщение высоты maxHeight)

Любая помощь будет оценена по достоинству … Я попробовал множество решений для изменения размера UITextView, и у всех есть такая же проблема. Заранее спасибо!

Interesting Posts

Невозможно одновременно удовлетворить ограничения Предупреждения с помощью AVPlayerViewController, встроенные в раскадровку

APNs Сообщение отправляется на сервер, на устройство iOS не поступает уведомление

Как работать с двумя TableView

Пометить людей как instagram

Обнаружение затрагивает UIView внутри UIScrollView, желательно с отключенным взаимодействием

Есть ли точка перехвата, например prepareForSegue для TabBarController?

Невозможно получить приглашения в игровой центр

Получить текущее местоположение пользователя / координаты

UISearchBar выбрать весь текст

NSFileCoordinator правильное использование для файла журнала sqlite в песочнице Приложение Mac App Store

iOS UIButton с UITextAlignmentLeft все еще центрирующим текстом?

CGRectMake не работает с UIView

Как я могу сделать шрифт, например Apple Color Emoji.ttf, который использует цветные растровые изображения?

Повышение минимальной целевой версии развертывания iOS для обновления приложений

iOS: обновление экрана запуска динамически

PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.