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