[在iOS 11上,Apple通过使拐角变得更圆且高度更大来重新设计了UISearchBar。只需使用navigationItem.titleView = searchBar
将UISearchBar设置为navigationItem的titleView,即可将UISearchBar添加到navigationBar。
但是,在iOS 11中,它似乎不再能正常工作。看看我们使用iOS 10和iOS 11比较相同设置的屏幕]
iOS 10
iOS 11
您可以清楚地看到SearchBar增大了NavigationBar的大小,但是条形按钮没有正确对齐。而且searchBar不再使用左侧的可用空间。
[按照此处Cancel button is not shown in UISearchBar的说明,将searchBar放入包装器视图中以获取iPad上的取消按钮,由于现在完全不可见searchBar,因此似乎不再起作用。
如果有人遇到类似的问题或已经知道如何解决/改进此问题,我将非常感激。
这是使用Xcode 9 Beta 4构建的。也许将来的版本将解决此问题。
UPDATE:
由于此问题尚未解决,我们决定使用以下解决方案。我们在NavBar中添加了一个新的UIBarButtonItem,然后提供了一个新的ViewController,我们只在其中放置了searchBar,而在NavBar中什么也没用,这似乎可行。使用选择的答案可能是最好的解决方案,因为带有iOS 11的Apple希望我们使用此新设计,即使它没有给我们最初想要的结果。解决此问题的另一种方法可能是自定义SearchBar,但这是另一个主题。
[在iOS 11上,Apple通过使拐角变得更圆且高度更大来重新设计了UISearchBar。只需将UISearchBar设置为...的标题视图即可,将其添加到navigationBar相当简单...
[iOS 11中NavigationItem上有一个新的searchController属性。
您可以通过添加高度限制44来更改iOS 11中UISearchBar的高度:
如果您确实要使用本机 类似的东西:UISearchBar
(并且避免创建自定义组件的需要)] >>在iOS 11+ navigationBar
中,则可以为该searchBar
创建容器视图完全控制框架。此容器视图将是您传入的searchBar
的超级视图。
[我认为您必须将新的UINavigationItem.searchController属性设置为UISearchController对象。这就是您获得Messages中所见的新效果的方式。看来旧的行为已经不复存在了。我希望我是错的,但是整个API都要进行11的大修。我知道它总体上是有问题的,因此,如果此问题得以解决,我们将看到更新的Beta和GM。 (在Beta 6时撰写)
这对我有帮助:
if ([self.navigationItem respondsToSelector:@selector(setSearchController:)])
{
[self.navigationItem performSelector:@selector(setSearchController:) withObject:self.searchController];
}
else
{
self.tableView.tableHeaderView = self.searchController.searchBar;
}
[我尝试使用searchController
和searchBar
,但发现searchBar
符合我的要求(单击搜索按钮进行搜索)。
-(void)searchBarSetUp{
//Search button to reload the radio content.
self.searchButton.action = @selector(addSearchBarToNavigationTitleView);
self.searchButton.target = self;
//search bar initialization
searchBar = [[UISearchBar alloc] initWithFrame:CGRectZero];
searchBar.delegate = self;
searchBar.showsCancelButton = YES;
[searchBar sizeToFit]; }
-(void)addSearchBarToNavigationTitleView {
// Install the search bar as the table header.
self.navigationItem.titleView = searchBar;}