UISearchController - черный прямоугольник - PullRequest
0 голосов
/ 30 декабря 2018

Я реализую простой tableViewController с UISearchcontroller.

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

Iтакже попытался использовать definePresentationContext и searchBarStyle, но он продолжает показывать прямоугольник.С другой стороны, похоже, что в симуляторе этого не происходит, поскольку клавиатура отсутствует.

Обновление: под некоторыми фотографиями.

ViewController:

class ListGlobalViewController: UITableViewController, StoryboardSceneBased, ViewModelBased {

  static var sceneStoryboard: UIStoryboard = UIStoryboard(name: "DataSelectorViewController", bundle: Bundle.main)

  // --------------------
  // MARK: - Properties
  // --------------------
  var viewModel: ListGlobalViewModel!
  private let disposeBag = DisposeBag()


  private let searchController: UISearchController = {
    let searchController = UISearchController(searchResultsController: nil)
    searchController.searchBar.searchBarStyle = .minimal
    searchController.dimsBackgroundDuringPresentation = false
    searchController.hidesNavigationBarDuringPresentation = true
    return searchController
  }()

  override func viewDidLoad() {
    super.viewDidLoad()
    tableView.tableFooterView = UIView()
    configure(with: viewModel)

    navigationItem.largeTitleDisplayMode = .automatic
    navigationItem.searchController = searchController
    navigationItem.hidesSearchBarWhenScrolling = false
  }

  override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
  }

  override func viewDidDisappear(_ animated: Bool) {
    super.viewDidDisappear(animated)
    self.searchController.isActive = false
  }
  override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
  }

  // --------------------
  // MARK: - Functions
  // --------------------
  func configure(with viewModel: ListGlobalViewModel) {
    self.tableView.delegate = nil
    self.tableView.dataSource = nil

    viewModel.outputs.listDataObservable.bind(to: self.tableView.rx.items(cellIdentifier: "listGlobalCell", cellType: ListGlobalCell.self)) { (index, model, cell) in
       cell.model = model
    }.disposed(by: disposeBag)

    searchController.searchBar.rx.text.filterNil().throttle(1, scheduler: MainScheduler.instance).distinctUntilChanged().subscribe(viewModel.inputs.searchBarObservable).disposed(by: disposeBag)

  }
}

Значения навигации по умолчанию:

let controller = UINavigationController()
    controller.navigationBar.isTranslucent = false
    controller.navigationBar.prefersLargeTitles = true
    controller.definesPresentationContext = true
    controller.navigationBar.titleTextAttributes = [ NSAttributedString.Key.font: UIFont.bold(size: 24), NSAttributedString.Key.foregroundColor: UIColor.black ]

    if #available(iOS 11, *) {
      controller.navigationBar.largeTitleTextAttributes = [ NSAttributedString.Key.font: UIFont.bold(size: 33), NSAttributedString.Key.foregroundColor: UIColor.black ]
    }
    return controller

Изображения: Normal State

Ошибка Bugged state

1 Ответ

0 голосов
/ 30 декабря 2018

Используйте UITextField вместо UISearchBar.Вы можете дать любой дизайн uitextfield.Панель UISearch имеет ограниченные настраиваемые атрибуты.Также вы можете связаться с любой функцией поиска с помощью текстового поля.

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