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