Я столкнулся с этой странной проблемой при разработке универсального приложения iOS. Мое приложение выглядит довольно просто. У корня у меня есть UITableViewController
. Первая вкладка содержит UISplitViewController
. Ведущий UISplitViewController
является UINavigationController
с UITableViewController
, а деталь - UINavigationController
с UITableViewController
.UISplitViewControllers DetailViewController имеет неправильный контентInste.bottom, когда MasterViewController находится в режиме поиска
Кроме того, в представлении главной таблицы есть строка поиска в ее tableHeaderView
, которую я использую для фильтрации записей. Это все работает, как ожидалось, но я вижу один вопрос появляется на устройствах, где UISplitViewController
показывает мастер и детализацию в то же время (например, IPad или большой iPhone экран:
ПРОБЛЕМА: Когда клавиатура активна в строке поиска от хозяина, tableView
из деталей имеют неправильного contentInset.bottom
Причина:. Я использую tableView.contentInset.top
и tableView.contentInset.bottom
вместе с tableView.bounds.height
для вычисления высоты карты клеток в tableView(_:heightForRowAt:)
в зависимости от того, сколько других клеток я отображающей
Я отлаживал его и, как правило, вставка .top
равна 64, а .bottom
- это 49, которые являются ожидаемыми значениями для строки состояния + навигационной панели и панели табуляции. Однако, когда клавиатура активна в панели поиска, вставка .bottom
становится 104, которая является 49 из табеля PLUS 55 панели инструментов клавиатуры. Как вы можете видеть, панель инструментов клавиатуры накладывает вкладку и не просто сдвигает ее, и я думаю, что tableview неправильно вычисляет свою вставку .bottom
.
ВОПРОС: Что я должен сделать так, чтобы tableView.contentInset.bottom
является 0, когда нет TabBar, 49, если есть TabBar и 55, если есть панель инструментов наложения TabBar?
Посмотрите, как карта сдвигается вверх, когда панель клавиатуры включена? Это происходит потому, что в tableView(_:heightForRowAt:)
tableView.contentInset.bottom
составляет 104 вместо 55.
Если клавиатура не активна/Searchbar не сфокусирован, tableView.contentInset.bottom
возвращается правильный высоту 49.