我的UISearchBar是导航栏的一部分,比如:

 let searchBar = UISearchBar()
 //some more configuration to the search bar
 .....
 navigationItem.titleView = searchBar

在更新到iOS 11之后,我的应用程序中的搜索栏发生了一些奇怪的事情.在iOS 10和之前的版本中,我的导航栏如下所示:

enter image description here

现在我有iOS 11个:

enter image description here

如您所见,两个搜索栏的舍入不同,这并不困扰我.问题是搜索栏增加了导航栏的高度.因此,当我转到另一个控制器时,它看起来也很奇怪:

enter image description here

事实上,怪异黑线的高度加上当前导航栏的高度等于第二张图片中显示的导航栏的高度...

你知道如何摆脱黑线,并在所有视图控制器上保持一致的导航栏高度吗?

推荐答案

在iOS 11中,有两种情况下,我在带有搜索栏的导航栏下面显示了黑线:

  • 当我使用UISearchBar从ViewController推送另一个ViewController时 enter image description here

  • 当我用UISearchBar和"向右拖动以解除"解除ViewController时

我的解决方案是:使用UISearchBar将以下代码添加到我的ViewController:

-(void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    [self.navigationController.view setNeedsLayout]; // force update layout
    [self.navigationController.view layoutIfNeeded]; // to fix height of the navigation bar
}

Swift 4 Update

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    navigationController?.view.setNeedsLayout() // force update layout
    navigationController?.view.layoutIfNeeded() // to fix height of the navigation bar
}

Ios相关问答推荐

与iPadOS中带有扣件的模式相似的组件是什么?

UITableViewCell编程约束问题

为什么IOS多行文本输入在React原生纸张对话框中无法正常工作?

Flutter iOS 键盘问题:. TextInputType.number 中缺少字符

为什么applicationState发布者只发布一次?

如何在 SwiftUI 中通过通用 @ObservedObject 进行切换?

将 URLCache 子类与 URLSession 一起使用

无法在 CollectionView 中禁用部分弹跳 - 组合布局

如何根据条件快速将返回类型设为 LinearGradient 或 AngularGradient?

如何在Collection 后更改并保留按钮 colored颜色 ,然后在 SwiftUI 中切换回来?

TextField 重复输入 SwiftUI

UICollectionView - 水平滚动,水平布局?

如何忽略touch 事件并将它们传递给另一个子视图的 UIControl 对象?

通过 iOS 创建和导出动画 gif?

如何隐藏uitabbar控制器

正确的领域使用模式/最佳实践?

Select 器touchesBegan:withEvent:的覆盖方法具有不兼容的类型(NSSet,UIEvent)->()

单击 GoogleSignIn 按钮时应用程序崩溃

检测应用程序何时进入我的视图背景的最佳方法是什么?

如何立即移动 CALayer(无动画)