在 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 7 中的 PushViewController

iOS - 调用方法:[self.navigationController pushViewController: animated:],屏幕全黑