UISearchController дает сбой при размещении в UINavigationItem - iOS 11+ - PullRequest
1 голос
/ 29 октября 2019

У меня UISearchController в FirstViewController navigationItem. И то же самое в SecondViewController, и я нажимаю SecondViewController из FirstViewController.

Когда пользователь скользит, чтобы вернуться назад, виден следующий глюк UI.

UISearchController glitch while sliding back

Область, содержащая UISearchController, становится тусклой. Если пользователь возвращается к FirstViewController, это выглядит хорошо. Но если пользователь остается в SecondViewController после небольшого скольжения, то вот как это выглядит.

Missing UISearchController in navigationItem

Пространство, в котором было searchController сейчас пусто. Если пользователь прокручивает вверх или вниз, searchController снова становится видимым.

Параметры пытались решить проблемы

  • , используя UITableViewController вместо UIViewController с UITableView
  • , переключая свойство navigationItem.hidesSearchBarWhenScrolling в viewDidLoad иviewWillAppear
  • установка navigationItem.searchController как nil в viewWillDisappear

Помимо этой проблемы, когда я использую UITableView внутри UIViewController, searchController скрывается под заголовком и выходит с немного большей скоростью, чем родные приложения, такие как «Сообщения», «Почта». И когда я использую UITableViewController, анимация плавная, но searchController нападает наполовину, если пользователь не скользит вверх или вниз полностью, как показано ниже. Это происходит как с большими заголовками, так и без них.

UISearchController getting struck

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

ОБНОВЛЕНИЕ: настройкаextendedLayoutIncludesOpaqueBars как true в SecondViewController действительно решил проблему. Но в представлении таблицы есть небольшой нежелательный рывок, если пользователь скользит, чтобы вернуться, но затем передумает.

enter image description here

1 Ответ

0 голосов
/ 29 октября 2019

Пожалуйста, попробуйте это .. Это работает для меня. Я надеюсь, что это работает и для вас.

Objective-C

-(void)viewWillDisappear:(BOOL)animated{
    if (@available(iOS 13.0, *)) {
        [self.navigationController.view setNeedsLayout]; 
        [self.navigationController.view layoutIfNeeded];
    }
}

Swift

func viewWillDisappear(_ animated: Bool) {
    if (@available(iOS 13.0, *)) {
         self.navigationController?.view.setNeedsLayout()     
         self.navigationController?.view.layoutIfNeeded()
    }
}

если это не работает, тогда установите анимацию NO или false, когда вы нажимаете или представляете ViewController

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...