gpt4 book ai didi

swift - 如何以编程方式滚动时更新 UITableview 标题高度

转载 作者:行者123 更新时间:2023-11-30 10:38:30 25 4
gpt4 key购买 nike

在我的应用程序中,我有顶部导航栏和导航栏下方的表格 View 。我有 CollectionViewCell ,其中有两行以编程方式添加到 UITableViewHeader 中。当我将 TableView 滚动到顶部时,我希望标题停止在导航栏的正下方,并更新 TableView 标题高度,以便我只能显示一行。我只想做一个动画(如收缩),当 TableViewHeader 粘在导航栏上时,两个 CollectionView 行应该通过降低标题高度变成一行。我怎样才能以编程方式做到这一点

下面是我显示 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
}

此外,我正在检查滚动位置以按编程方式设置表格 View 标题高度,这对我来说并不成功。

    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 高度更新。

感谢任何帮助。

最佳答案

您正在寻找的是“粘性标题”并且您还想更改标题。

  • 粘性部分是自动内置的,我想如果你只使用 UITableViewController(style: .plain),如果这不适合你,你可以只谷歌粘性标题,有很多答案。

  • 有关更改高度或动画的部分。你做得对,只需执行以下操作:

    //更新您的 viewForHeader 方法以考虑上面的 headerRows 变量

//更新您的 viewForHeader 方法以考虑上面的 headerRows 变量

// 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 的引用存储在 View Controller 的变量中,并在scrollViewDidScroll 中使用 UIView.animate{...} 对其进行动画处理

希望这对人有帮助。

关于swift - 如何以编程方式滚动时更新 UITableview 标题高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57363724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com