附加的iOS 11风格的UISearchBar背景图像

4
我想将基于tableHeaderView的搜索栏迁移到iOS 11中通过配置navigationItem.searchController使用的新的无缝搜索栏方法。
由于我的导航栏使用自定义背景图像,我想知道如何将相同的背景图像应用于搜索栏。 我尝试过:
[navigationBar setBackgroundImage:[UIImage imageNamed:@"NavigationBarPromptBackground"] forBarMetrics:UIBarMetricsDefaultPrompt];
[searchBar setBackgroundImage:[UIImage imageNamed:@"NavigationBarBackground"] forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];

但是无济于事。搜索栏仍然保留了标准导航栏的背景颜色(应用了barTintColor),但没有显示自定义的背景图片。


使用外观代理? - matt
外观代理仅自动设置普通属性,如果普通属性不存在,则无法工作。 - Ortwin Gentz
2
这个iOS 11的变化真是噩梦啊... 即使视图层次结构调试器正确显示了背景图片,但实际输出却没有显示出来... 设置searchController是一回事,但如果无法自定义,这个新功能就没什么用了:( - manonthemoon
2个回答

3
在我的情况下,我在一个视图中有一个UISearchBar,而不是放置在UINavigationItem中。我设置的透明背景图片在iOS 11上没有显示出来。然而,如果我添加一个高度约束来强制搜索栏变小,那么这个背景图片会被使用。这是非常奇怪的行为,可能是一个错误,但现在它对我起作用了。
如果我执行以下操作,背景图片将被使用:
[[searchBar.heightAnchor constraintEqualToConstant:44.0] setActive:YES];

固定高度的话,你就无法获得动画展示的效果了,对吧? - Ortwin Gentz
1
这个约束似乎对显示动画没有影响。但是当将backgroundImage放在navigationBar中时,它也没有被使用。我的用法不是这样的,所以我在发布之前还没有测试过它。抱歉,我觉得值得一试。 - Jamie Hamick

1

我在我的应用程序中做了类似的事情,并发现在IOS11上它现在已经失效了。这是我之前的代码,可以将我的图像设置在搜索栏和范围栏上,在IOS10之前都能正常工作:

[searchBarSearch setBackgroundImage:image];
[searchBarSearch setScopeBarBackgroundImage:image];

我通过将以下内容添加到 .plist 文件中修复了它。
View controller-based status bar appearance = NO

现在我的工具栏变成了彩色,并且能够像IOS11之前一样随着我选择不同选项而改变。

希望这能对您有所帮助!

等离子


谢谢,知道了,但是回到传统的状态栏外观处理对我来说不是一个选择。 - Ortwin Gentz
我也找不到 setBackgroundImage 这个 API。只有一个带有多个参数、条形指标等的 API,但在 iOS 11 上存在问题。 - manonthemoon
我仍在IOS 11中使用此代码,并且它仍然按照我的期望工作,也许您可以详细说明一下哪些部分对您不起作用。我的searchBarSearch对象是一个UISearchBar,我在Xcode 9和iOS 11中只有一个参数的setBackgroundImage选项(我还有一个带有3个参数的选项)。 - Plasma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接