通过使用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,但这是另一个主题。
发布于 2017-08-22 20:08:51
在searchController 11中的navigationItem上有一个新的iOS属性。
https://developer.apple.com/documentation/uikit/uinavigationitem/2897305-searchcontroller
像这样使用..。
if #available(iOS 11.0, *) {
navigationItem.searchController = searchController
} else {
// Fallback on earlier versions
navigationItem.titleView = searchController?.searchBar
}
在目标-C中,if语句如下所示:
if (@available(iOS 11.0, *)) {
在iOS 11上,如果不设置navigationItem.hidesSearchBarWhenScrolling = false
,搜索栏一开始可能是隐藏的,除非用户向下滚动显示搜索栏。如果您确实将其设置为false,则它将显示在标题的下面,而无需用户滚动。
发布于 2017-09-22 03:17:12
通过添加高度44的约束,可以在UISearchBar 11中更改iOS的高度:
if #available(iOS 11.0, *) {
searchBar.heightAnchor.constraint(equalToConstant: 44.0).isActive = true
}
发布于 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没有大小问题。
关键的几行是
_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将具有您为其设置的大小,并将符合导航栏的要求。
谢谢你,大卫
https://stackoverflow.com/questions/45350035
复制相似问题