【问题标题】:iOS 11 Top Item Check For UINavigationBariOS 11 UINavigationBar 的顶部项目检查
【发布时间】:2017-10-30 08:27:43
【问题描述】:

我正在使用这个控件来访问 UINavigation 栏和它的项目。

if ([self.searchBar.superview isKindOfClass:[UINavigationBar class]]) { 
       navigationItem = ((UINavigationBar *) self.searchBar.superview).topItem;
  }

但是当我使用 iOS 11 模拟器和 xCode 9 时它不起作用。

如果我使用 iOS 8.2 等较低版本的模拟器进行调试并打印

po self.searchBar.superView

它会打印“UINavigationBar”,但是当我在 iOS 11 上执行相同操作时,它会打印“_UINavigationBarContentView”。

我应该如何更改 iOS 11 的代码?

【问题讨论】:

    标签: ios objective-c ios11 xcode9


    【解决方案1】:

    你可以试试这个代码

    if (@available (iOS 11.0, *)) {
      if ([self.searchBar.superview isKindOfClass:[UINavigationBar class]]) {
        navigationItem = ((UINavigationBar *) self.searchBar.superview).topItem;
      }
    } else {
      if ([self.searchBar.superview.superview isKindOfClass:[UINavigationBar class]]) {
        navigationItem = ((UINavigationBar *) self.searchBar.superview.superview).topItem;
      }
    }
    

    【讨论】:

    • 谢谢,但正如我所说,'self.searchBar.superview' 是 iOS 11 上的 UINavigationBarContentView,所以 'if ([self.searchBar.superview isKindOfClass:[UINavigationBar class]])' 控件返回 nil
    • 我也认为 " if (@available (iOS 11.0, *)) { } " 是检查版本的更好方法 :)
    • 同意我的朋友 :)。我将根据您对其他需要它的人的建议来编辑我的答案。
    【解决方案2】:

    您使用以下代码。 可能是您没有添加以下行,那么您应该得到“无”响应。 navigationItem.searchController = searchController

    iOS 11 中的 navigationItem 上有一个新的 searchController 属性。 https://developer.apple.com/documentation/uikit/uinavigationitem/2897305-searchcontroller

    iOS 11 让我们从大标题开始。几乎所有项目都包含导航控制器。为了在此控制器的导航栏中设置大标题,应将新属性 prefersLargeTitles 设置为 true。

    这样使用...

    例如,可以在视图控制器的 viewDidLoad 函数中添加以下行:

    在 Swift 代码中:-

    self.navigationController?.navigationBar.prefersLargeTitles = true
    
    if #available(iOS 11.0, *) {
         navigationItem.searchController = searchController
    } else {
         // Fallback on earlier versions
         navigationItem.titleView = searchController?.searchBar
    }
    

    目标 C 代码:-

    self.navigationController.navigationBar.prefersLargeTitles = YES;
    
    if #available(iOS 11.0, *) {
         navigationItem.searchController = searchController;
    } else {
         // Fallback on earlier versions
         navigationItem.titleView = searchController.searchBar;
    }
    

    【讨论】:

      猜你喜欢
      • 2018-02-10
      • 1970-01-01
      • 2015-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多