iOS 11中的导航栏UISearchBar

10

在iOS 11中,UISearchBar与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
})

这里查看损坏的动画效果视频。


1
我也遇到了同样的问题,你是怎么解决的? - sancho
2个回答

3
只需要将它用UIView包裹起来,动画就会重新出现。

1
那么 UIView 就会完全消失。我需要为其指定大小吗? - Sti
@awuu,我在iOS11中遇到了类似的问题。当我将UISearchBar用作titleView时,当我弹出此控制器时,现在显示的ViewController将与导航栏有一定距离,并且当我按照您所说的方式,在视图中包装搜索栏,然后将此视图设置为titleView时,这个问题就不会发生了,但我仍然想知道为什么会发生这种情况? - ximmyxiao
@Sti 是的,自动布局会做到这一点。 - awuu
@ximmyxiao,我猜这是苹果的一个bug,因为iOS 11的LargeTitles,苹果经常改变NavigationBar。 - awuu
如果你用UIView包装它,那么UISearchBar的尺寸会很奇怪,并且无法编辑其中的文本。 - user1561346
显示剩余2条评论

2

请参考UIPercentDrivenInteractiveTransition,该类用于在UINavigationController转换过程中以百分比值更新UIView。

换句话说,取决于UINavigationController已打开的下一个视图控制器或向后移动的视图数量,视图的外观将有所不同。

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


这是管理此类事物的最正确和最简单的方法。您可以在网络上找到很多示例。抱歉我没有准备任何代码,因为我已经做了很长时间,许多代码可能已经过时适用于iOS 10+。 - ObranS
从你的回答中并不明显如何向UISearchBar添加动画。 - user1561346
这似乎是一个好答案,但我不知道该如何做。 - Alex
1
一样的,怎么做呢?我必须制作自定义转换来处理搜索栏的不透明度吗? - Edward Anthony

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