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

时间:2017-12-11 17:34:24

标签: ios uitableview uiscrollview ios11 uisearchcontroller

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

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

enter image description here

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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