Как отключить прокрутку в таблице UITableView, когда содержимое помещается на экране - PullRequest
218 голосов
/ 14 сентября 2011

В моем приложении для iphone есть несколько таблиц (сгруппированных стилей) (только на части экрана, добавленных с помощью Interface Builder, но не в подклассах от UITableViewController), которые в 80% случаев малы и подходят дляэкран.Когда таблица уместится на экране, я бы хотел отключить прокрутку, чтобы она стала чище.Но если таблица исчезает с экрана (когда к ней добавляются строки), я бы хотел снова включить прокрутку (потому что в противном случае вы не сможете увидеть это содержимое).

Есть ли способ сделать это?этот?Я не могу понять это.Я знаю, что делать:

tableView.scrollEnabled = NO;

, но я не уверен, где или нужно ли мне вычислять размер объекта таблицы или что-то еще, чтобы заставить это работать.

Обновление : Вот решение, которое наконец-то сработало для меня:

if (table.contentSize.height < table.frame.size.height) {
   table.scrollEnabled = NO;
 }
else {
   table.scrollEnabled = YES;
 }

Я запускаю этот код после вызова reloadData для таблицы, и он вычисляет правильные размеры и, кажется, работает.

table.frame.size.height - это фактический размер объекта (вы можете увидеть это в Interface Builder), отображаемый на экране, тогда как table.contentSize.height - это высота: верхний и нижний колонтитулы, а также высотакаждая ячейка складывается вместе.

Ответы [ 9 ]

364 голосов
/ 14 сентября 2011

Я думаю, вы хотите установить

tableView.alwaysBounceVertical = NO;
42 голосов
/ 14 сентября 2011

Вы можете проверить количество видимых ячеек, используя эту функцию:

- (NSArray *)visibleCells

Этот метод вернет массив с видимыми ячейками, поэтому вы можете посчитать количество объектов в этом массиве и сравнитьс количеством объектов в вашей таблице .. если оно равно .. вы можете отключить прокрутку, используя:

tableView.scrollEnabled = NO;

Как упоминалось @ Джинни .. у нас могут быть проблемы с частично видимыми ячейками, поэтому это решениелучше работает в этом случае:

tableView.scrollEnabled = (tableView.contentSize.height <= CGRectGetHeight(tableView.frame));

В случае, если вы используете autoLayout, это решение делает работу:

tableView.alwaysBounceVertical = NO.
33 голосов
/ 01 августа 2016

В Свифт:

tableView.alwaysBounceVertical = false
12 голосов
/ 31 июля 2014

попробуйте

[yourTableView setBounces:NO];
9 голосов
/ 22 ноября 2016

Вы можете включить / отключить отскок или прокрутку таблицы, выбрав / отменив выбор в области просмотра прокрутки

Scroll View editing area

5 голосов
/ 28 октября 2018

Так что есть несколько ответов и требуется все содержимое одновременно, поэтому я добавляю этот ответ:

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

  • В коде:

tableView.alwaysBounceVertical = false

  • или в Интерфейсном Разработчике:

Просто найдите эту опцию и untick "Bounce Vertically" опцию.

Вот ссылка:

enter image description here

Если вы не используете AutoLayout:

 override func viewDidLayoutSubviews() {
    // Enable scrolling based on content height
    tableView.isScrollEnabled = tableView.contentSize.height > tableView.frame.size.height
 }
3 голосов
/ 04 декабря 2014

Вы можете отредактировать это в вашей раскадровке (если вы ее используете).Под табличным представлением есть флажок «Прокрутка включена».Снимите флажок, и все готово.

1 голос
/ 31 марта 2017

// Enable scrolling based on content height self.tableView.scrollEnabled = table.contentSize.height > table.frame.size.height;

0 голосов
/ 14 сентября 2011

Высота по умолчанию 44.0f для ячейки табличного представления, я считаю. Вы должны иметь свой источник данных в руках в массиве? Затем просто проверьте, выходит ли [array count]*44.0f за пределы кадра и, если это так, установите tableview.scrollEnabled = NO, иначе установите его в YES. Сделайте это там, где вы определите источник данных для этого конкретного табличного представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...