【问题标题】:Attached iOS 11-style UISearchBar background image附上 iOS 11 风格的 UISearchBar 背景图片
【发布时间】:2017-12-09 05:14:18
【问题描述】:

我想通过配置 navigationItem.searchController 将基于 tableHeaderView 的搜索栏迁移到 iOS 11 中新的无缝搜索栏方法。

由于我的导航栏使用自定义背景图片,我想知道如何将相同的背景图片应用到搜索栏。我试过了

[navigationBar setBackgroundImage:[UIImage imageNamed:@"NavigationBarPromptBackground"] forBarMetrics:UIBarMetricsDefaultPrompt];
[searchBar setBackgroundImage:[UIImage imageNamed:@"NavigationBarBackground"] forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];

无济于事。搜索栏保持标准导航栏背景(应用barTintColor),但不显示自定义背景图片。

【问题讨论】:

  • 使用外观代理?
  • 外观代理只会自动设置普通属性,如果普通属性不设置则不起作用。
  • 这个 iOS 11 更改真的是一场噩梦......即使视图层次结构调试器也正确显示了背景图像,但实际输出没有显示它......设置 searchController 是一回事,但是如果无法进行自定义,则此新功能将无用 :(

标签: ios uinavigationcontroller uikit uisearchbar ios11


【解决方案1】:

在我的情况下,我在视图中有一个 UISearchBar,而不是放在 UINavigationItem 中。我设置的透明背景图像没有出现在 iOS 11 中。但是,如果我添加一个高度约束,迫使 searchBar 变小,则由于某种原因会使用背景图像。这确实是一个奇怪的行为,一定是一个错误,但它现在对我有用。

如果我执行以下操作,则会使用背景图像:

[[searchBar.heightAnchor constraintEqualToConstant:44.0] setActive:YES];

【讨论】:

  • 在固定高度的情况下,您不会获得动画显示外观,对吧?
  • 约束似乎不会影响显示动画。但是将 backgroundImage 放在导航栏中时也不会使用它。我的不是这样使用的,所以我在发布时还没有测试过。抱歉,觉得值得一试。
【解决方案2】:

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

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

我通过将它添加到 .plist 来修复它

View controller-based status bar appearance = NO

现在,当我选择不同的选项时,我的栏会发生颜色变化,就像 IOS11 之前一样。

希望对你有帮助!

等离子

【讨论】:

  • 谢谢,很高兴知道,但是很遗憾,回到旧的状态栏外观处理对我来说不是一个选择。
  • 我也看不到那个 API setBackgroundImage。只有一个具有多个参数栏指标等。在 iOS 11 上已损坏。
  • 我仍在 IOS 11 中使用此代码,它仍在做我期望它做的事情,也许您可​​以扩展对您不起作用的内容。我的 searchBarSearch 对象是一个 UISearchBar,我在 Xcode 9 和 iOS 11 中只有一个参数(我也有一个有 3 个参数)的 setBackgroundImage 选项。
猜你喜欢
  • 1970-01-01
  • 2012-06-06
  • 2012-05-25
  • 1970-01-01
  • 2019-01-13
  • 1970-01-01
  • 2012-04-17
  • 1970-01-01
  • 2012-11-30
相关资源
最近更新 更多