Отображение таблицы прокрутки вниз при использовании динамической высоты ячейки

Как я могу прокрутить представление таблицы вниз до использования динамической высоты ячейки?

По какой-то причине этот код не работает в этом сценарии:

[self.tableView scrollRectToVisible:CGRectMake(0, self.tableView.contentSize.height - self.tableView.bounds.size.height, self.tableView.bounds.size.width, self.tableView.bounds.size.height) animated:YES]; 

Благодаря!

EDIT : используйте код @ Hasiya для прокрутки донизу, для некоторых из вас это может сделать трюк.

4 Solutions collect form web for “Отображение таблицы прокрутки вниз при использовании динамической высоты ячейки”

Следующее работало на мой код Swift 3.1 с использованием Xcode 8.3.2, ориентированного на iOS 10.1 только для iPhone.

У меня была та же проблема, что и у ОП. Мое приложение включало функцию обмена сообщениями. Я хотел, чтобы последнее сообщение было видимым, когда представление сообщения было перенесено в стек. Высокие высоты ячеек таблицы изменяются из-за содержания сообщений. Ни одно из решений не удовлетворило меня (последняя строка таблицы была не видна или только частично видима). Но вот то, что сработало для меня:

  • В построителе интерфейса (IB) установите высоту строки ячейки в значение больше, чем я ожидал, что моя средняя высота строки будет в моем случае 50 (обязательно установите флажок «Пользовательский»).
  • В ViewController, где представление таблицы реализовано внутри функции viewDidLoad, установите свойство rowHeight tableview следующим образом:

     myTableView.rowHeight = UITableViewAutomaticDimension 
  • Также в функции 'viewDidLoad' задано значение 'ratedRowHeight' tableview для значения выше, чем вы ожидаете, что средняя высота строки будет. В моем случае 140.

Наконец, и самое главное, я написал этот бит кода:

 extension UITableView { func scrollToBottom() { let rows = self.numberOfRows(inSection: 0) let indexPath = IndexPath(row: rows - 1, section: 0) self.scrollToRow(at: indexPath, at: .top, animated: true) } } 

Обратите внимание at: .top – это то, что решило мою проблему. Передача значения .bottom для параметра UITableViewScrollPosition просто не работала. Даже прохождение .middle работало – но не .bottom .

Таким образом, в любое время, когда мой набор данных необходимо обновить или поступит новое сообщение, я звоню

 func getTableViewData(){ // Get your data here any way you usually do.. // call to reload myTableView.reloadData() // call the scroll function myTableView.scrollToBottom() } 

Я проверил результаты этого «метода», просто изменив параметр at: .bottom at: .top . Каждый раз, когда я менял его at: .top последние строки таблицы были полностью видимы, а таблица прокручивалась до конца.

В конце концов, я нашел ответ . Причина, по которой прокрутка к нижней части не работает (и вставка / удаление строк также ошибочна, как я узнал позже), заключается в том, что высота ячейки not properly estimated . Чтобы обойти это, попробуйте вернуть близкие оценки в estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath . Однако, если вы не можете этого сделать (и в большинстве случаев вы не сможете), все еще существует отличное решение: Храните высоты ячеек в словаре и возвращайте их для estimatedHeight когда ячейки повторно используются ( например, просмотр таблицы прокручивается). Я нашел это решение в другом вопросе, поэтому, пожалуйста, пойдите и проверьте это на предмет фактического кода о том, как вы это выполнили. (хотя, вероятно, многие из вас могут написать это для себя)

Исходное решение от @dosdos

РЕДАКТИРОВАТЬ: Возможно, исправление просто прокрутки на дно это не нужно, как бы настоятельно не рекомендовано, на мой взгляд. Если вы не используете это для оценки высоты строки, вы столкнетесь с другими проблемами, такими как прокрутка с ошибкой и худшая производительность в большом количестве ячеек.

Также вам нужно добавить это в viewDidAppear

 let lastItem = IndexPath(item: dataSource.count - 1, section: 0) tableView.scrollToRow(at: lastItem, at: .bottom, animated: true) 

Надеюсь, это может сработать для вас. Попробуй это

 [self.tableview setContentOffset:CGPointMake(0, CGFLOAT_MAX)] 

Или

 if (self.tableview.contentSize.height > self.tableview.frame.size.height) { CGPoint offset = CGPointMake(0, self.tableview.contentSize.height - self.tableview.frame.size.height); [self.tableview setContentOffset:offset animated:YES]; } 

Попробуйте использовать scrollToRowAtIndexPath, как указано в приведенном ниже коде.

 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; NSInteger no = array.count-1; NSIndexPath *lastIndex = [NSIndexPath indexPathForRow:no inSection:0]; [self.tableView scrollToRowAtIndexPath:lastIndex atScrollPosition:UITableViewScrollPositionBottom animated:YES]; } 
  • Как пройти prepareForSegue: объект
  • Как подождать, пока CCMenuItemImage не будет нажата в цель C?
  • Ошибка приема <unknown>: 0: ошибка: нет такого файла или каталога:
  • Предупреждение: UIAlertController уже представляет
  • Получение изображений с xcassets Cocoapod не работает
  • как вы изменяете размер (визуально, а не программно) подробный вид UISplitViewController в раскадровке?
  • Ошибка приложения на iOS5-симуляторе и профилировщике
  • Реагировать на встроенное приложение, застрявшее на заставке на устройстве, но работает в симуляторе
  • ERROR ITMS-90534: «Недействительная инструментальная цепочка
  • Не удалось исправить проблему с идентификацией подписи на Xcode
  • Как показать ярлык загрузки над UITableView?
  • Interesting Posts

    Проблемы с просмотром высоты (продолжение)

    Как использовать / внедрить календарь Tapku Day View?

    iOS: связь с базой данных sql

    Предотвращение перемещения пользовательского интерфейса при появлении клавиатуры

    Info.plist приложения Newsstand должен содержать UINewsstandApp.error.message = true

    iOS Development: Push-уведомления предотвращают мои локальные уведомления от стрельбы

    iOS – отображение содержимого из файла ресурсов html или удаленной веб-страницы в веб-просмотре

    Каков главный сценарий использования Socket.IO

    Как использовать датчик близости программно с разработкой iOS?

    Может ли кто-нибудь предоставить ссылку на учебник RestKit 0.20, который работает

    Модальный вид iOS 7 делает кнопки серыми (отключены)

    iOS 4 Core Data … любые изменения при многозадачности?

    Регистрация файла GPX (или XML) для открытия в приложении iOS

    Как я могу настроить проект для работы, как шаблон проекта «Window-Based Application» из XCode 4.0, в версии 4.2+?

    Ориентация iPhone – как мне понять, какой путь вверх?

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