Как отключить прокрутку в таблице UITableView, когда содержимое соответствует экрану

В моем приложении для iphone есть несколько таблиц (сгруппированных стилей) (только на части экрана, добавленных с помощью Interface Builder но не UITableViewController подклассы из 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 - это высоты: верхнего и нижнего колонтитулов, а также высоты каждого элемента. ячейка сложена вместе.

Ответ 1

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

tableView.alwaysBounceVertical = NO;

Ответ 2

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

- (NSArray *)visibleCells

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

tableView.scrollEnabled = NO;

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

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

Если вы используете autoLayout, это решение выполняет следующее задание:

tableView.alwaysBounceVertical = NO.

Ответ 3

В Swift:

tableView.alwaysBounceVertical = false

Ответ 4

попробуйте это

[yourTableView setBounces:NO];

Ответ 5

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

Scroll View editing area

Ответ 6

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

Ответ 7

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

Если вы используете 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
 }

Ответ 8

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

Ответ 9

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