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