UITableView 行在 UITableViewHeaderSection 下滑动
UITableView rows sliding under UITableViewHeaderSection
我有一个 UITableView 填充此示例词典。
var WholeDict = [
"Animals" : ["Cat","Dog"],
"Fruits" : ["Apple","Orange"]
]
内容太少。所以我选择分组的 UITableView 样式,这样我就可以避免在 UITableView 的内容下方显示不需要的单元格。但问题是,当我选择分组样式时,滚动时每个部分下的单元格不会在 header 下。滚动首先移动 header。
Grouped style: cells scrolling along with header &
Plain style: cells sliding under header。这就是我在代码中所做的
func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
let allkeys = Array(WholeDict.keys)
return allkeys[section]
}
func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
if let headerView = view as? UITableViewHeaderFooterView {
headerView.textLabel?.textAlignment = .Center
}
}
那么如何避免tableview下方的多余空格,同时在headers下使用行的滑动呢?
编辑
我正在使用沃尔特斯的回答。它对我有用。但后来我遇到了另一个问题。当我滚动到最后一行之后时,屏幕将只显示我添加的页脚。所以我添加了另一个解决方法。
func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
let visiblerows = MyTable.indexPathsForVisibleRows
if visiblerows?.count == 0 {
let ScrollToIndexPath = NSIndexPath(forRow: 0, inSection: WholeDict.count - 1)
MyTable.scrollToRowAtIndexPath(ScrollToIndexPath, atScrollPosition: UITableViewScrollPosition.Top, animated: true)
}
}
如果你想固定你的部分 headers,你可以使用这个 属性。
self.tableView.style = UITableViewStyleGrouped
它使您的部分 headers 紧贴行并随行滚动。
UITableView
将始终添加空白 "cells" 以填充 space。为了让它们消失,您应该创建一个 footerView,它填充最后填充行底部和 tableView 底部之间的 space。这是一个简单的示例,但您可能需要根据添加单元格的方式来移动它。 tableView 的 contentSize
属性 的高度等于 tableView 的填充部分。
let contentSize = self.tableView.contentSize
let footer = UIView(frame: CGRect(x: self.tableView.frame.origin.x,
y: self.tableView.frame.origin.y + contentSize.height,
width: self.tableView.frame.size.width,
height: self.tableView.frame.height - self.tableView.contentSize.height))
self.tableView.tableFooterView = footer
我有一个 UITableView 填充此示例词典。
var WholeDict = [
"Animals" : ["Cat","Dog"],
"Fruits" : ["Apple","Orange"]
]
内容太少。所以我选择分组的 UITableView 样式,这样我就可以避免在 UITableView 的内容下方显示不需要的单元格。但问题是,当我选择分组样式时,滚动时每个部分下的单元格不会在 header 下。滚动首先移动 header。 Grouped style: cells scrolling along with header & Plain style: cells sliding under header。这就是我在代码中所做的
func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
let allkeys = Array(WholeDict.keys)
return allkeys[section]
}
func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
if let headerView = view as? UITableViewHeaderFooterView {
headerView.textLabel?.textAlignment = .Center
}
}
那么如何避免tableview下方的多余空格,同时在headers下使用行的滑动呢?
编辑 我正在使用沃尔特斯的回答。它对我有用。但后来我遇到了另一个问题。当我滚动到最后一行之后时,屏幕将只显示我添加的页脚。所以我添加了另一个解决方法。
func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
let visiblerows = MyTable.indexPathsForVisibleRows
if visiblerows?.count == 0 {
let ScrollToIndexPath = NSIndexPath(forRow: 0, inSection: WholeDict.count - 1)
MyTable.scrollToRowAtIndexPath(ScrollToIndexPath, atScrollPosition: UITableViewScrollPosition.Top, animated: true)
}
}
如果你想固定你的部分 headers,你可以使用这个 属性。
self.tableView.style = UITableViewStyleGrouped
它使您的部分 headers 紧贴行并随行滚动。
UITableView
将始终添加空白 "cells" 以填充 space。为了让它们消失,您应该创建一个 footerView,它填充最后填充行底部和 tableView 底部之间的 space。这是一个简单的示例,但您可能需要根据添加单元格的方式来移动它。 tableView 的 contentSize
属性 的高度等于 tableView 的填充部分。
let contentSize = self.tableView.contentSize
let footer = UIView(frame: CGRect(x: self.tableView.frame.origin.x,
y: self.tableView.frame.origin.y + contentSize.height,
width: self.tableView.frame.size.width,
height: self.tableView.frame.height - self.tableView.contentSize.height))
self.tableView.tableFooterView = footer