【问题标题】:UISearchController - Black RectangleUISearchController - 黑色矩形
【发布时间】:2018-12-30 17:25:17
【问题描述】:

我正在用 UISearchcontroller 实现一个简单的 tableViewController。

问题是每次我按下搜索字段时,都会在键盘出现后立即出现一个黑色矩形。

我也尝试使用 definePresentationContext 和 searchBarStyle 但它一直显示矩形。另一方面,由于没有键盘,因此在模拟器中似乎不会发生。

更新:下面是一些照片。

视图控制器:

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

图片:

漏洞

【问题讨论】:

    标签: swift cocoa navigation tableview ios11


    【解决方案1】:

    如果UISearchBar,则使用UITextField。您可以为 uitextfield 提供任何设计。 UISearch 栏具有有限的可设计属性。您还可以使用文本字段访问任何搜索功能。

    【讨论】:

    • 是的,但这不是真正的解决方案。还是谢谢
    • 我认为,这个问题与键盘大小有关。你可以使用这个 repo。 github.com/hackiftekhar/IQKeyboardManager
    • 我已经在使用 IQKeyboard。它默认启用,我尝试了 IQKeyboardManager.shared().isEnabled = false (禁用),黑色矩形消失了。
    猜你喜欢
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    相关资源
    最近更新 更多