具有搜索栏跳转功能的导航控制器



我的主视图中有一个导航控制器,它包含一个搜索栏。然后,当它转到第二个视图(没有搜索栏(时,屏幕上会有一个小跳跃,当我回到第一个视图时也会发生同样的事情。

这是我的第一个viewController的导航控制器代码:

func configureNavBar() {
navigationController?.navigationBar.isTranslucent = false
navigationController?.navigationBar.barTintColor = .mainPink()
navigationController?.navigationBar.barStyle = .black
searchBar = UISearchBar()
searchBar.delegate = self
searchBar.tintColor = .white
navigationItem.titleView = searchBar
searchBar.showsCancelButton = true
}

第二:

navigationController?.navigationBar.isTranslucent = false
navigationController?.navigationBar.barTintColor = .mainPink()
navigationController?.navigationBar.barStyle = .black

有没有办法消除这种"跳跃"?

这个问题实际上包含两个不同的问题:

1-如果"大导航栏"在导航到另一个视图控制器时突然折叠:

表格视图滚动是主要原因,请尝试以下操作:

self.tableView.contentInsetAdjustmentBehavior = .never

您也可以从故事板中的"大小检查器"进行设置。

它调整其与安全区域相对应的滚动位置。


2-在其导航项的标题视图中包含搜索栏的"默认导航栏"的情况:

主要原因是搜索栏默认添加高度为"56">

  • 关于推送视图控制器导航栏下方出现的黑线,因此您可以通过以下方式修复它:

    // Inside ViewDidLoad of the Pushed View Controller
    self.extendedLayoutIncludesOpaqueBars = true
    

override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationController?.view.setNeedsLayout() 
navigationController?.view.layoutIfNeeded()
}
  • 为了防止在放置搜索栏时完全扩展导航栏,如下所示:

您需要创建一个具有固定高度框架的自定义视图,并在其中添加此搜索栏,请检查以下内容:

类 SearchBarViewHolder: UIView {

let searchBar: UISearchBar  
init(customSearchBar: UISearchBar) {  
searchBar = customSearchBar  
super.init(frame: CGRect.zero)  
addSubview(searchBar)  
}
override convenience init(frame: CGRect) {  
self.init(customSearchBar: UISearchBar())  
self.frame = frame  
}  
required init?(coder aDecoder: NSCoder) {  
fatalError("init(coder:) has not been implemented")  
}  
override func layoutSubviews() {  
super.layoutSubviews()  
searchBar.frame = bounds  
}  
}

添加搜索栏

let searchBarViewHolder = SearchBarViewHolder(customSearchBar: searchBar)  
searchBarViewHolder.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: 44)  
navigationItem.titleView = searchBarViewHolder  

相关内容

  • 没有找到相关文章

最新更新