在我的应用程序中,我有顶部导航栏,并且在导航栏下方有一个表格视图。我有两行的CollectionViewCell,这些行以编程方式添加到UITableViewHeader中。每当我将TableView滚动到顶部时,我都希望标题停在导航栏的正下方,并更新TableView Header的高度,以便仅显示一行。我只想做一个动画(如收缩),当TableViewHeader粘贴到导航栏时,两个collectionview行应通过减小Header Height而变成一行。如何以编程方式完成
下面是我显示CustomHeaderView的代码
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerView = UIView.init(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: 183))
let headerCell = tableView.dequeueReusableCell(withIdentifier: kLastPlayedidentifier) as! LastPlayedTVC
headerCell.frame = headerView.frame
headerCell.category = lastPlayedData
headerView.addSubview(headerCell)
return headerView
}
我也在检查滚动位置,以编程方式设置tableview标头的高度,这对我来说并不成功。
func scrollViewDidScroll(_ scrollView: UIScrollView) {
print(scrollView.contentOffset)
if scrollView.contentOffset.y > 237 //This value is to check when the header reached the top position {
//Condition to check and animate the headerview height to make collectionview cell two rows into one rows.
}
滚动时标题停留在顶部时,如何实现TableViewHeader高度更新。
感谢您的帮助。
答案 0 :(得分:0)
您要查找的是“粘性标头” 并且您还想更改标题。
粘性部分是自动内置的,我认为如果您仅使用UITableViewController(style:.plain),如果对您不起作用,则可以使用谷歌粘性标题,并且有很多答案。 p>
有关更改高度或为其设置动画的部分。您做对了,只需执行以下操作:
///更新您的viewForHeader方法,以解决上面的headerRows变量
//更新您的viewForHeader方法以解决上述headerHeadws变量
// default 2, you modify this in your scroll
var headerRows = 2
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let height = headerRows == 2 ? 183 : 91
let headerView = UIView.init(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: height))
let headerCell = tableView.dequeueReusableCell(withIdentifier: kLastPlayedidentifier) as! LastPlayedTVC
headerCell.frame = headerView.frame
headerCell.category = lastPlayedData
headerView.addSubview(headerCell)
return headerView
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
print(scrollView.contentOffset)
if scrollView.contentOffset.y > 237 {
updatedHeader.frame.size.height = 40
self.tableviewObj.tableHeaderView = updatedHeader
headerRows = 1 } else {
headerRows = 2
}
self.tableView.reloadSectionHeaders()
}
如果您想做一些动画,您需要做的是将对headerView的引用存储在视图控制器的变量中,并在scrollViewDidScroll内部使用UIView.animate {...}对其进行动画处理。
希望这对人有帮助。