У меня есть представление, которое отображается под навигационным контроллером. Представление содержит одно подвыборку в верхней части и представление таблицы внизу. В таблице могут быть строки, которые выходят за пределы видимой высоты на основе данных. Когда у меня есть строки, которые ниже последней видимой строки, если я просматриваю представление вверх, он отскакивает назад, он не остается там. Есть ли способ заставить его остаться? Я попытался сделать родительский вид прокрутки, и это не помогло. Мой взгляд - из XIB.Скроллинг в виде таблицы отскакивает назад и скрывает нижние ячейки
ответ
Похоже, что размер вашего UITableView немного больше, чем область, доступная на экране iPhone. Возможно, это связано с тем, что в представлении не учитывался размер панели навигации hte. В качестве теста перейдите в Interface Builder и сделайте UITableView намного меньше, скажем, половину размера, чтобы вы могли четко видеть верх и низ. Посмотрите, есть ли у вас все тот же отскок.
Если размеры правильные, UITableView не требует, чтобы UIScrollView функционировал должным образом. На самом деле, было бы несколько причин, о которых я могу думать прямо сейчас (кроме горизонтальных прокрутки), что вы хотите UITableView внутри UIScrollView.
На верхнем уровне View Controller в настройках «Имитированные показатели» установите верхнюю панель и/или нижнюю панель (в зависимости от того, что отображается в вашем контроллере просмотра) до «непрозрачного». Затем измените размер таблицы, чтобы она соответствовала панели навигации и панели инструментов/панели вкладок. Наконец, добавьте два ограничения:
- верхнее пространство для верхней направляющей макета
- нижнее пространство для нижней направляющей
Макет работал очень хорошо для меня, независимо от ориентации.
Если вы не используете раскадровки, вы можете попробовать следующее (быстрый) код:
tableView.contentInset = UIEdgeInsetsMake((self.navigationController!.navigationBar.frame.origin.y + self.navigationController!.navigationBar.frame.size.height), 0, 0, 0)
self.view.addSubview(tableView)
Если у вас есть панель инструментов или (если вы используете TabBarController), вам нужно настроить нижний тоже:
tableView.contentInset = UIEdgeInsetsMake((self.navigationController!.navigationBar.frame.origin.y + self.navigationController!.navigationBar.frame.size.height), 0, 0, 0)
self.view.addSubview(tableView)
Обратите внимание, что это простой и «грубый» код. Вы можете сделать его красивее, если необходимо :)
Спасибо за ваше наблюдение, что устранила проблему. – Umark
Отлично. Из вашей истории я вижу, что вы не выбираете ни одного из принятых ответов, так как официальные ответы на ваши вопросы. Возможно, вы этого не знали, но слева от ответов вы видите галочку. Если вы нажмете кнопку, то вы выбираете ответ, который был решением вашей проблемы. Это дает мне некоторую репутацию, плюс для людей, которые имеют один и тот же вопрос, они видят, какой ответ помог вам. Когда у вас появится шанс, нажмите галочку. Благодарю. – mahboudz
Awesome, попробовал массу вещей, прежде чем это исправило мою проблему. –