[NavigationBar中的iOS 11 SearchBar

问题描述 投票:69回答:7

[在iOS 11上,Apple通过使拐角变得更圆且高度更大来重新设计了UISearchBar。只需使用navigationItem.titleView = searchBar将UISearchBar设置为navigationItem的titleView,即可将UISearchBar添加到navigationBar。

但是,在iOS 11中,它似乎不再能正常工作。看看我们使用iOS 10和iOS 11比较相同设置的屏幕]

iOS 10

enter image description here

iOS 11

enter image description here

您可以清楚地看到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相当简单...

uinavigationbar uisearchbar ios11
7个回答
51
投票

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


16
投票

您可以通过添加高度限制44来更改iOS 11中UISearchBar的高度:


4
投票

我遇到了同样的问题,经过数天的搜索,发现了此页面-https://translate.google.com/translate?hl=en&sl=zh-CN&u=http://www.jianshu.com/p/262f6e34a7d3&prev=search


2
投票

如果您确实要使用本机UISearchBar (并且避免创建自定义组件的需要)] >>在iOS 11+ navigationBar中,则可以为该searchBar创建容器视图完全控制框架。此容器视图将是您传入的searchBar的超级视图。

类似的东西:


1
投票

[我认为您必须将新的UINavigationItem.searchController属性设置为UISearchController对象。这就是您获得Messages中所见的新效果的方式。看来旧的行为已经不复存在了。我希望我是错的,但是整个API都要进行11的大修。我知道它总体上是有问题的,因此,如果此问题得以解决,我们将看到更新的Beta和GM。 (在Beta 6时撰写)


1
投票

这对我有帮助:

    if ([self.navigationItem respondsToSelector:@selector(setSearchController:)])
    {
        [self.navigationItem performSelector:@selector(setSearchController:) withObject:self.searchController];
    }
    else
    {
        self.tableView.tableHeaderView = self.searchController.searchBar;
    }

0
投票

[我尝试使用searchControllersearchBar,但发现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;}
© www.soinside.com 2019 - 2024. All rights reserved.