【问题标题】:UISearchBar Disappear From UINavigationBar When Use "back swipe" iOS 12使用“后滑动”iOS 12 时,UISearchBar 从 UINavigationBar 消失
【发布时间】:2019-08-21 16:31:19
【问题描述】:

我有 2 个ViewController 来实现:

    let searchBar = UISearchBar()

    func viewDidLoad() {
       navigationItem.titleView = searchBar    
    }

当我按下第二个视图控制器并尝试用滑动手势返回时,我所有的导航项都不可撤销地消失了。

也许有人知道如何解决它?

图片:

SearchBar First VC https://imgur.com/QJxflWP.png

SearchBar 第二个 VC https://imgur.com/FUBo0t6.png

NavigationBar 开始向后滑动时 https://imgur.com/G2FXrnq.png

【问题讨论】:

  • 嘿。我有同样的问题。你是怎么解决的?

标签: ios swift uisearchbar


【解决方案1】:

导航项与视图控制器相关联。因此,如果您想在两个视图控制器中都使用搜索栏,则必须为两个视图控制器设置搜索栏。

此外,您可以使用 searchController 属性在导航控制器中显示搜索栏。这样您就可以在导航栏中显示标题和搜索栏。

【讨论】:

  • 感谢您的回答,就我而言,两个 ViewController 在 vi​​ewDidLoad 中实现了相同的代码,
【解决方案2】:

导航项与视图控制器相关联。所以如果你想在两个视图控制器中显示搜索栏,你必须在 viewDidLoad 方法中单独添加它。

您还可以使用 searchController 属性在导航栏中显示搜索栏。这样您就可以在导航栏中同时显示标题和搜索栏。

【讨论】:

    【解决方案3】:

    我终于通过处理 UINavigationBarDelegate 方法解决了这个问题。

    1. 使用你自己的 UINavigationController 因为 UINavigationController 是 UINavigationBar 的默认委托,我不需要将委托重新分配给其他类来处理。

    2. 实现这些代码并获取 UISearchBar 内部的 searchField 以轻微更改其框架。

    extension YourNavigationController: UINavigationBarDelegate {
      func navigationBar(_ navigationBar: UINavigationBar, shouldPop item: 
     UINavigationItem) -> Bool {
          if let inSearchBar = item.titleView as? UISearchBar,
            let searchField = inSearchBar.value(forKey: "searchField") as? UIView {
              searchField.frame = CGRect(x: 0, y: 0, width: searchField.frame.width + 1, height: 36)
          }
      }
    }
    

    我这样做是因为我发现如果searchField的框架不改变,那么搜索栏就会消失。这不是一个好方法,而是一种显示正确视图的解决方法。在 iOS 13 中,我相信我们可以检查使用 searchTextField 来替换 Apple 文档提供的属性 searchField

    【讨论】:

      猜你喜欢
      • 2018-12-21
      • 2011-04-09
      • 1970-01-01
      • 2018-06-13
      • 2018-02-10
      • 1970-01-01
      • 2016-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多