首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >iOS 11 SearchBar in NavigationBar

iOS 11 SearchBar in NavigationBar
EN

Stack Overflow用户
提问于 2017-07-27 11:52:34
回答 8查看 36.5K关注 0票数 70

通过使用iOS 11,苹果公司重新设计了UISearchBar,使角落更圆,高度更大。将UISearchBar添加到navigationBar非常简单,只需将其设置为使用navigationItem.titleView = searchBar的navigationItem的titleView。

然而,在iOS 11中,它似乎不再像预期的那样工作了。请看一下使用iOS 10和iOS 11比较相同设置的屏幕

iOS 10

iOS 11

您可以清楚地看到,SearchBar增加了NavigationBar的大小,但是条形按钮没有正确地对齐。另外,searchBar不再使用左边的可用空间了。

如本文所述,将searchBar放入包装器视图以获取iPad上的cancel按钮似乎不再有效,因为searchBar那时是不可见的。

如果任何人有类似的问题或已经知道如何解决/改进这一点,我将非常感谢。

这是用Xcode 9 Beta 4构建的,也许未来的版本会解决这个问题。

更新:

由于没有解决这个问题,我们决定使用下面的解决方案。我们将一个新的UIBarButtonItem添加到NavBar中,然后在NavBar中显示一个新的ViewController,其中我们只将一个searchBar,而没有其他任何东西放入似乎有效的NavBar中。使用所选的答案可能是最好的解决方案,因为苹果与iOS 11希望我们使用这个新的设计,即使它没有给我们最初想要的结果。另一种可能解决这个问题的方法是定制SearchBar,但这是另一个主题。

EN

回答 8

Stack Overflow用户

发布于 2017-08-22 20:08:51

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

https://developer.apple.com/documentation/uikit/uinavigationitem/2897305-searchcontroller

像这样使用..。

代码语言:javascript
运行
复制
if #available(iOS 11.0, *) {
     navigationItem.searchController = searchController
} else {
     // Fallback on earlier versions
     navigationItem.titleView = searchController?.searchBar
}

在目标-C中,if语句如下所示:

代码语言:javascript
运行
复制
if (@available(iOS 11.0, *)) {

在iOS 11上,如果不设置navigationItem.hidesSearchBarWhenScrolling = false,搜索栏一开始可能是隐藏的,除非用户向下滚动显示搜索栏。如果您确实将其设置为false,则它将显示在标题的下面,而无需用户滚动。

票数 52
EN

Stack Overflow用户

发布于 2017-09-22 03:17:12

通过添加高度44的约束,可以在UISearchBar 11中更改iOS的高度:

代码语言:javascript
运行
复制
if #available(iOS 11.0, *) {
    searchBar.heightAnchor.constraint(equalToConstant: 44.0).isActive = true
}
票数 16
EN

Stack Overflow用户

发布于 2017-09-21 17:50:20

我也有同样的问题,在谷歌搜索了几天之后,我找到了这个页面-- https://translate.google.com/translate?hl=en&sl=zh-CN&u=http://www.jianshu.com/p/262f6e34a7d3&prev=search

这个页面导致了这个git https://github.com/DreamTravelingLight/searchBarDemo -这个演示项目展示了如何使用与titleView的旧方式仍然有一个searchBar没有大小问题。

关键的几行是

代码语言:javascript
运行
复制
_searchBar = [self addSearchBarWithFrame:CGRectMake(0, 0, kScreenWidth - 2 * 44 - 2 * 15, 44)];
UIView *wrapView = [[UIView alloc] initWithFrame:_searchBar.frame];
[wrapView addSubview:_searchBar];
self.navigationItem.titleView = wrapView;

如果将UISearchBar嵌入视图中,并将该wrapView设置为titleView,则UISearchBar将具有您为其设置的大小,并将符合导航栏的要求。

谢谢你,大卫

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45350035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档