iOS 11 UINavigationBar的顶级项检查

iOS 11 UINavigationBar的顶级项检查,ios,objective-c,ios11,xcode9,Ios,Objective C,Ios11,Xcode9,我正在使用此控件访问导航栏及其项 if ([self.searchBar.superview isKindOfClass:[UINavigationBar class]]) { navigationItem = ((UINavigationBar *) self.searchBar.superview).topItem; } 但当我使用iOS11模拟器和xCode 9时,它就不起作用了 如果我使用较低版本的模拟器(如iOS 8.2)进行调试并打印 po self.searc

我正在使用此控件访问导航栏及其项

if ([self.searchBar.superview isKindOfClass:[UINavigationBar class]]) { 
       navigationItem = ((UINavigationBar *) self.searchBar.superview).topItem;
  }
但当我使用iOS11模拟器和xCode 9时,它就不起作用了

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

po self.searchBar.superView
它打印“UINavigationBar”,但当我在iOS 11上执行相同操作时,它打印“UINavigationBarContentView”

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

您可以尝试此代码

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;
  }
}
您可以使用以下代码。 可能你们并没有在下面的行中添加,那个么你们应该得到“无”的响应。 navigationItem.searchController=searchController

iOS 11中navigationItem上有一个新的searchController属性。

iOS 11是让我们从大标题开始。几乎所有项目都包含导航控制器。要在此控制器的导航栏中设置大标题,应将新属性PrefersLangerTitles设置为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;
}

谢谢,但正如我所说的“self.searchBar.superview”是iOS 11上的UINavigationBarContentView,所以“如果([self.searchBar.superview是类:[UINavigationBar class]])控件返回nil,我也认为“如果(@available(iOS 11.0,*){}”是检查版本的更好方法:)同意我的朋友:)。我会根据你的建议编辑我的答案,供其他需要的人参考。