我的主视图中有一个导航控制器,其中包括一个searchBar。然后,当它转到第二个视图(没有searchBar)时,屏幕上会有一点跳跃,当我返回第一个视图时,也会发生同样的事情。
这是我的第一个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
有什么办法可以消除这种“跳跃”?
答案 0 :(得分:2)
这个问题实际上包含两个不同的问题:
1-如果导航到另一个View Controller时“大型导航栏”突然崩溃:
TableView滚动是主要原因,请尝试以下操作:
self.tableView.contentInsetAdjustmentBehavior = .never
您也可以从情节提要中的“大小检查器”进行设置。
它根据SafeArea调整其滚动位置。
2-“默认导航栏”在其导航项的标题视图中包含SearchBar的情况:
主要原因是默认情况下搜索栏的高度为“ 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