Разрыв над первой таблицей с использованием UISearchController

Я не могу удалить пробел над первой строкой таблицы при тестировании с iOS 10.3. Я попробовал все решения, предложенные в других сообщениях, таких как automaticallyAdjustsScrollViewInsets, добавил фиктивное представление над UITableView в иерархии, например. здесь - но все безуспешно.

Вот установка и сценарий.

У меня есть UIViewController с UITableView. Назовите его V1. он встроен в навигационный контроллер.

Я добавляю UISearchController в viewDidLoad() в заголовок таблицы. Я не устанавливаю никаких ограничений, не контролируя какой-либо макет программно.

 self.searchController.obscuresBackgroundDuringPresentation = false
 self.searchController.hidesNavigationBarDuringPresentation = true
if #available(iOS 11.0, *)  {

            self.searchController.searchBar.delegate = self
            self.navigationItem.searchController = self.searchController
            self.navigationController?.navigationBar.prefersLargeTitles = true
            self.searchController.searchBar.scopeButtonTitles = ["All","A","B"]
            self.navigationItem.hidesSearchBarWhenScrolling = true

        } else {

           self.searchController.searchBar.delegate = self
           self.searchController.searchBar.scopeButtonTitles = ["All","A","B"]
           tableView.tableHeaderView = searchController.searchBar
           self.searchController.searchBar.sizeToFit()
}

У меня есть еще один VC (таблица), из которого я собираю данные, используя unwind segue. Назовите его V2.

я делаю ниже в методе размотки

DispatchQueue.main.async {

                self.searchController.searchBar.text = searchText

                    self.searchController.isActive = true
                let scope = self.searchController.searchBar.scopeButtonTitles![self.searchController.searchBar.selectedScopeButtonIndex]

                self.filterContentForSearchText(searchText, scope: scope)

            }

Сценарий 1 - работает нормально 1. При открытии V1 строки и панель поиска отображаются точно в заголовке таблицы. 2. Нажмите на кнопку панели, которая открывает V2 3. Выберите значение и вернитесь 4. Возвращаемое значение назначается панели поиска, и панель поиска открывается на панели навигации 5 В таблице показаны строки, соответствующие возвращаемому значению из V2 Между первой строкой и панель поиска

Сценарий 2 - это не удается. 1. При открытии V1 строки и панель поиска отображаются точно в заголовке таблицы. 2. Прокрутите строки вверх так, чтобы заголовок находился под панелью навигации 3. Нажмите на кнопку панели, которая открывает V2 4. Выберите значение и вернитесь 5. Возвращаемое значение назначается панели поиска, и панель поиска открывается в панели навигации 5 В таблице показаны строки, которые соответствует возвращаемому значению из V2

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

Я заметил, что происхождение tableview равно -88, когда происходит выше.

Я попытался установить верхнее ограничение представления таблицы как для суперпредставления, т.е. для просмотра, так и для нижней части верхнего макета.

В чем может быть проблема? скриншоты прилагаются.

  1. На снимке экрана показан разрыв между активным контроллером поиска и первой ячейкой.введите здесь описание изображения
  2. На снимке экрана показан разрыв между неактивным контроллером поиска и первой ячейкой.введите здесь описание изображения
  3. Визуальный отладчик, показывающий представление ViewController оранжевым цветом, табличное представление зеленым цветом и представление заголовка плоским сливовым цветом. Над первой ячейкой, которую я выбрал, есть представление. Не знаю, что это такое, но вызывает ли это проблему? Вид там на нижней таблице также. введите здесь описание изображения

Спасибо, Ашиш.


person ashishn    schedule 05.06.2018    source источник
comment
Я потратил на это два дня, перепробовал все возможные варианты, и кто-то проголосовал за вопрос. Был бы признателен за комментарий вместе с голосованием против меня, чтобы я шел в правильном направлении.   -  person ashishn    schedule 05.06.2018
comment
Я попытался установить активный режим seachController при раскрутке, если # available(iOS 11.0, *) == true, но это создает другую проблему, когда первая ячейка смещается вниз, частично открывая UIRefreshControl.   -  person ashishn    schedule 06.06.2018