在 iOS 11 上以编程方式滚动 UISearchController 的搜索栏不会消失

Posted

技术标签:

【中文标题】在 iOS 11 上以编程方式滚动 UISearchController 的搜索栏不会消失【英文标题】:Programmatically scrolling on iOS 11 with UISearchController's search bar not disappearing 【发布时间】:2017-12-11 17:34:24 【问题描述】:

ios 11 上,搜索栏能够/建议使用 navigationItem.searchController = searchController 附加到导航控制器,动画 contentOffset 更改似乎有点错误,因为搜索栏似乎经常保持原位。之后立即滚动修复它,但它很难看。

如果您通过点击状态栏一直滚动到顶部(使搜索栏可见),然后在UIScrollView 上为contentOffset 更改设置动画,您会看到搜索栏有时会出现,特别是在设备而不是模拟器上(但您仍然可以在模拟器上看到导航栏太高):

即使是 Xcode 的一个模板项目,例如“Master Detail”,也可以很容易地观察到这一点,方法是添加一个搜索控制器,然后添加一个按钮来跳转。

@objc func goBackUp(_ sender: Any) 
    tableView.setContentOffset(CGPoint(x: 0.0, y: 1200), animated: true)

这是一个示例项目,显示:Sample Project

我知道这很可能是一个 iOS 错误,因为在 iOS 10 及更早版本上没有问题,但在此期间有人知道修复吗?

【问题讨论】:

【参考方案1】:

iOS 11 中的 navigationItem 上有一个新的 searchController 属性。

https://developer.apple.com/documentation/uikit/uinavigationitem/2897305-searchcontroller

在 iOS 11 上,如果您不设置 navigationItem.hidesSearchBarWhenScrolling = false,搜索栏最初可能会被隐藏,除非用户向下滚动以显示它。如果您确实将其设置为 false,则它会堆叠在标题所在的下方,而无需用户滚动。

【讨论】:

该属性只会影响滚动时它是否粘住。上面概述的问题是,当滚动并且它被设置为不粘时,它会。

以上是关于在 iOS 11 上以编程方式滚动 UISearchController 的搜索栏不会消失的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 上以编程方式将视频上传到 Vine?

无法在 xCode 12 上以编程方式为较旧的 iOS 版本创建应用程序

如何在 iOS 上以编程方式将视频上传到 Vine?

在 iOS EventKit 上以编程方式在线获取/更新谷歌日历数据

ipad如何在一个视图上以编程方式创建多个表

在 iOS 上以编程方式向按钮添加操作