在 pushViewController (iOS 11) 之后 NavigationBar 高度未更新
Posted
技术标签:
【中文标题】在 pushViewController (iOS 11) 之后 NavigationBar 高度未更新【英文标题】:NavigationBar height not updating after pushViewController (iOS 11) 【发布时间】:2018-04-10 23:13:19 【问题描述】:在导航栏中,我添加了一个搜索栏。它改变了导航栏的高度。我还调整了框架高度以使其看起来更好。以下所有代码都可以正常工作:
let locationSearchTableVC = storyboard!.instantiateViewController(withIdentifier: "LocationSearchTableVC") as! LocationSearchTableVC
resultSearchController = UISearchController(searchResultsController: locationSearchTableVC)
resultSearchController?.searchResultsUpdater = locationSearchTableVC as UISearchResultsUpdating
self.parent?.navigationItem.titleView = self.resultSearchController?.searchBar
let searchBar = resultSearchController!.searchBar
searchBar.delegate = self
searchBar.sizeToFit()
searchBar.placeholder = searchBarPlaceHolder
resultSearchController?.hidesNavigationBarDuringPresentation = false
resultSearchController?.dimsBackgroundDuringPresentation = true
definesPresentationContext = true
locationSearchTableVC.mapView = mapView
locationSearchTableVC.handleMapSearchDelegate = self
textFieldInsideUISearchBar = searchBar.value(forKey: "searchField") as? UITextField
textFieldInsideUISearchBar?.textColor = UIColor.gray
let textFieldInsideSearchBarLabel = self.textFieldInsideUISearchBar!.value(forKey: "placeholderLabel") as? UILabel
textFieldInsideSearchBarLabel?.textColor = UIColor.gray
textFieldInsideUISearchBar?.backgroundColor = UIColor(red: 212/255, green: 215/255, blue: 220/255, alpha: 1)
let bounds = self.navigationController!.navigationBar.bounds
let statusBarHeight = UIApplication.shared.statusBarFrame.height
self.navigationController?.navigationBar.frame = CGRect(x: 0, y: 0, width: bounds.width, height: bounds.height + statusBarHeight)
-
当用户点击 tableView 单元格时,我会使用 pushViewController 转换到另一个 viewController:
self.navigationController?.pushViewController(viewController2, animated: true)
目标是在推送后保持导航栏的大小,但我无法让它工作。请注意,在第二张图片中,它没有第一张那么高。
我尝试添加一个新的 searchBar(我会将其设置为半透明)、调整框架大小等,但无法让它移动。
事实上,如果我在第二个 viewController 中设置框架大小,则导航栏高度会折叠以占据状态栏的区域。很奇怪。
self.navigationController?.navigationBar.frame = CGRect(x: 0, y: 0, width: bounds.width, height: previousNavBarHeight!)
如果我设置self.additionalSafeAreaInsets.top
,我可以将navigationBar下方的内容推到它应该在的位置,但navigationBar本身的高度不会增加。
我在其他帖子中看到 ios11 在设置高度方面发生了变化,但我尝试过的解决方案都没有奏效。
【问题讨论】:
【参考方案1】:所以我终于让它工作了。我不得不尝试几种不同的方法来更改导航栏。下面是一个可以尝试的示例:
self.navigationController?.navigationItem.titleView = UISearchBar()
self.parent?.navigationController?.navigationItem.titleView = UISearchBar()
self.navigationItem.titleView = UISearchBar()
这就是有效的。我必须添加一个搜索栏,而不是手动调整导航栏的高度以使其大小合适(然后使其透明等)。
let searchBar = UISearchBar()
self.navigationItem.titleView = searchBar
searchBar.setImage(UIImage(), for: UISearchBarIcon.clear, state: .normal)
searchBar.setImage(UIImage(), for: UISearchBarIcon.search, state: .normal)
searchBar.isUserInteractionEnabled = false
let textFieldInsideUISearchBar = searchBar.value(forKey: "searchField") as? UITextField
textFieldInsideUISearchBar?.backgroundColor = UIColor.clear
现在,当我从第一个视图控制器(它有一个我实际使用的搜索栏)过渡到第二个视图控制器时,导航栏的大小保持不变并且不会反弹。
【讨论】:
这是黑客。请看Flow!以上是关于在 pushViewController (iOS 11) 之后 NavigationBar 高度未更新的主要内容,如果未能解决你的问题,请参考以下文章
在 pushViewController (iOS 11) 之后 NavigationBar 高度未更新
iOS - pushViewController 推送到 nil 视图控制器
iOS - pushViewController 没有滑动背景图片
pushViewController无法使用IOS11 SDK
iOS - 调用方法:[self.navigationController pushViewController: animated:],屏幕全黑