你好,我正在尝试使用 UITableView,我在 viewDidLoad 方法中添加了一个 SearchBar,如下所示:
我的问题是:
1- 可以向下推索引栏,使其不覆盖搜索栏
2- 可以在应用程序启动时在 viewDidLoad 方法中将整个 tableView 向上滚动到隐藏的 SearchBar
最佳答案
我不知道这是否是实现此目标的最简单方法,但它确实有效。
第一件事是不要将搜索栏添加为标题 View ,而是将其和表格 View 添加到单独的 ScrollView 中。像这样的东西(边距仅用于说明目的):浅蓝色是底层 ScrollView
这会自动修复问题 #1 - 索引栏现在位于搜索栏下方。
现在,由于这种嵌套的 ScrollView ( TableView 是 ScrollView 的子类),如果我们想要获得流畅的滚动体验,我们需要像这样子类化 UIScrollView
:
class InnerScrollView: UIScrollView {
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer,
shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
}
并使用此类作为我们的基础 ScrollView - 在代码中或通过在 Interface Builder 中设置它。这样一来,当用户滚动时,搜索栏将首先出现/消失,然后表格 View 内容将平滑滚动。
至于初始偏移量,这需要在 viewDidLayoutSubviews
中完成,因为这是您可以确保已设置 ScrollView 的第一个地方。
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
let initalContentOffset = CGPoint(x: 0, y:self.tableView.frame.origin.y)
self.underlyingScrollView.contentOffset = initalContentOffset
}
如果有任何不清楚的地方,请告诉我。
关于ios - UITableView、搜索栏和部分索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34042308/