Ответ 1
Я думаю, вы хотите установить
tableView.alwaysBounceVertical = NO;
В моем приложении для 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
- это высоты: верхнего и нижнего колонтитулов, а также высоты каждого элемента. ячейка сложена вместе.
Я думаю, вы хотите установить
tableView.alwaysBounceVertical = NO;
Вы можете проверить количество видимых ячеек с помощью этой функции:
- (NSArray *)visibleCells
Этот метод возвращает массив с видимыми ячейками, поэтому вы можете подсчитать количество объектов в этом массиве и сравнить с количеством объектов в вашей таблице. Если оно равно... вы можете отключить прокрутку, используя
tableView.scrollEnabled = NO;
Как упоминал @Ginny, мы могли бы иметь проблемы с частично видимыми ячейками, поэтому в этом случае это решение работает лучше:
tableView.scrollEnabled = (tableView.contentSize.height <= CGRectGetHeight(tableView.frame));
Если вы используете autoLayout, это решение выполняет следующее задание:
tableView.alwaysBounceVertical = NO.
В Swift:
tableView.alwaysBounceVertical = false
попробуйте это
[yourTableView setBounces:NO];
Вы можете установить включение/отключение отката или прокрутку таблицы, выбрав/отменив выбор в области просмотра прокрутки
Вы можете отредактировать это в своем раскадровке (если вы используете его). Под табличным представлением установлен флажок "Прокрутка включена". Снимите флажок, и все готово.
Таким образом, есть несколько ответов и требуется все содержимое одновременно, поэтому я добавляю этот ответ:
Если вы используете AutoLayout, установка этого параметра должна работать только для вас:
tableView.alwaysBounceVertical = false
Просто найдите эту опцию и untick
опции " Bounce Vertically
".
Вот ссылка:
Если вы не используете AutoLayout:
override func viewDidLayoutSubviews() {
// Enable scrolling based on content height
tableView.isScrollEnabled = tableView.contentSize.height > tableView.frame.size.height
}
// Enable scrolling based on content height
self.tableView.scrollEnabled = table.contentSize.height > table.frame.size.height;
По умолчанию высота по умолчанию равна 44.0f для ячейки tableview. Вы должны иметь свой источник данных в руке в массиве? Затем просто проверьте, не превышает ли значение [array count]*44.0f
границы кадра, и если установлено так: tableview.scrollEnabled = NO
, установите для него значение YES. Сделайте это там, где вы вычисляете источник данных для этого конкретного вида таблицы.