【问题标题】:iOS 11 UISearchBar in navigation bar导航栏中的 iOS 11 UISearchBar
【发布时间】:2018-02-12 17:50:41
【问题描述】:

UISearchBar 在 iOS 11 中的行为与在 iOS 10 及更低版本中的行为不同。

  • 大小已更改
  • 缺少推动另一个受控视图时的淡出动画

我用这段代码以某种方式“修复”了大小:

if #available(iOS 11.0, *) {
    searchBar.heightAnchor.constraint(equalToConstant: 44).isActive = true
}

但我无法修复动画。除了在推送时手动为搜索栏设置动画之外,还有什么想法?

UIView.animate(withDuration: 0.3, animations: { [weak self] in
    guard let strongSelf = self else { return }
    strongSelf.searchBar.alpha = 0.0
})

看破动画效果视频here

【问题讨论】:

  • 我也有同样的问题,你是怎么解决的?

标签: ios swift uinavigationbar uisearchbar ios11


【解决方案1】:

UIPercentDrivenInteractiveTransition 中查找答案。它用于更新 UIViews 在 UINavigationController 转换期间的 persentage 值。

换句话说,取决于 UINavigationController 已经打开了多少下一个视图控制器或向后移动视图会有不同的外观。

此值将帮助您更新搜索栏(alpha、宽度等)

【讨论】:

  • 这是管理此类事情的最正确和最简单的方法。你会在网上找到很多例子。抱歉,我没有准备任何代码,因为我做了这么长的科学,很多代码可能会在 iOS 10+ 上被废弃
  • 从您的回答来看,如何向 UISearchBar 添加动画并不明显。
  • 这似乎是一个很好的答案,但我不知道该怎么做。
  • 一样,怎么办?我是否必须进行自定义转换才能处理搜索栏的不透明度?
【解决方案2】:

只需用 UIView 包裹它,动画就回来了。

【讨论】:

  • 然后 UIView 就完全消失了。我必须为其指定尺寸吗?
  • @awuu,我在 iOS11 中遇到了类似的问题,当我使用 UISearchBar 作为 titleView 时,当我弹出这个控制器时,现在显示的 ViewController 将与导航栏有一段距离,当我按照你说的做时,将搜索栏包装在视图中,然后将此视图设置为 titleView ,不会发生此问题,但我仍然想知道为什么会发生这种情况?
  • @Sti 是的。自动布局会做到这一点。
  • @ximmyxiao,我猜是苹果的bug,因为iOS 11 的LargeTitles,苹果对NavigationBar 做了很多改动。
  • @ximmyxiao,我有几乎相同的问题,但将 UISearchBar 设置为 UITableVIew 的 tableHeaderView。