SearchResultsController скрывает экран при использовании с UINavigationItem - PullRequest
0 голосов
/ 02 мая 2018

Я использую новую интегрированную UISearchBar, доступную в iOS 11, проблема в том, что как только я нажимаю на панель поиска и начинаю печатать текст, SearchResultsController скрывает весь экран, включая панель поиска. Невозможно закрыть диспетчер результатов или отменить поиск впоследствии.

Чтобы продемонстрировать проблему, я настроил минимальный воспроизводимый пример:

import UIKit

let reuseid = "reuseIdentifier"
class TableViewController: UITableViewController, UISearchResultsUpdating {
  override func viewDidLoad() {
    super.viewDidLoad()
    tableView.register(UITableViewCell.self, forCellReuseIdentifier: reuseid)
  }

  // MARK: - Table view data source

  override func numberOfSections(in tableView: UITableView) -> Int {
    return 1
  }

  override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 10
  }

  override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: reuseid, for: indexPath)
    return cell
  }

  func updateSearchResults(for searchController: UISearchController) {
    print(searchController.searchBar.text)
  }
}


class ViewController: UIViewController {
  var searchController: UISearchController!
  override func viewDidLoad() {
    super.viewDidLoad()
    searchController = UISearchController(searchResultsController: TableViewController())
    navigationItem.searchController = searchController
  }
}

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
  var window: UIWindow?
  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    window = UIWindow(frame: UIScreen.main.bounds)
    window?.backgroundColor = UIColor.white
    window?.makeKeyAndVisible()
    let nc = UINavigationController(rootViewController: ViewController())
    window?.rootViewController = nc
    return true
  }
}
  1. Исходное состояние 1
  2. Нажатие на панели поиска 2
  3. Экран скрыт UITableView - окрашен в зеленый 3

Что может вызвать эту ошибку и как ее можно избежать?

1 Ответ

0 голосов
/ 03 мая 2018

Решено добавлением этого к SearchResultsUpdater:

edgesForExtendedLayout = []

При использовании краев по умолчанию ResultsController пытается расширить свой вид за пределы UINavigationBar и, следовательно, затемняет его:

enter image description here

...