UITableView,搜索栏和部分索引

时间:2015-12-02 12:04:44

标签: ios uitableview searchbar

你好我试图使用UITableView,我在viewDidLoad方法中添加了一个SearchBar,如下所示: enter image description here

和一个带有以下方法的节索引栏: enter image description here

我的问题是:

1-可以按下索引栏,使其不覆盖SearchBar

2-可以将viewDidLoad方法中的整个tableView向上滚动到隐藏的SearchBar,即应用程序的启动

enter image description here

1 个答案:

答案 0 :(得分:0)

我不知道这是否是实现这一目标的最简单方法,但它确实有效。

第一件事是不将搜索栏添加为标题视图,而是将其和表视图添加到单独的滚动视图中。像这样的东西(仅用于ilustratory目的的边距):浅蓝色是底层的滚动视图 nested views

这会自动修复问题#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

}

如果有什么不清楚,请告诉我。