滚动时如何使tableView单元格“粘”
Posted
技术标签:
【中文标题】滚动时如何使tableView单元格“粘”【英文标题】:How to make tableView cell "stick" while scrolling 【发布时间】:2018-08-03 21:44:42 【问题描述】:我的 tableView 顶部的单元格上有一个 SegmentedControl(tableView 由所有静态单元格组成)...我希望顶部单元格(和 segmentedControl)“粘贴”,以便它始终作为用户可见滚动表格(见下面的截图)。这可能吗?
【问题讨论】:
您想将分段控件添加为表格视图的子视图。然后添加与段控件高度相同的表格视图标题或空单元格。 非常简单,只需将 segmentedControl 拖放到表格的标题视图中即可。 @aBilal17 它不会被“粘住”。 正确的方法是不使用 TableViewController,而是使用 UIViewController 和 tableView。然后将分段控件添加为常规视图,这样就不会受到滚动的影响。 【参考方案1】:通常,要应用此行为,您应该将其添加为 标题视图 而不是单元格。表格视图中的标题视图确实“坚持”。但是由于您正在添加静态单元格(UITableViewController),因此即使您尝试将标题视图添加到表格视图,它也不会应用粘贴行为。
作为一种解决方法,您可能需要添加一个新的 UIViewController,其中包含顶部视图(标题视图)和容器视图,如下所示:
【讨论】:
谢谢它有点乱,因为 tableView 的视图依赖于 SegmentedControl 的值,即我必须做某种类型的协议/委托才能将消息从外部传递给 tableView风险投资。我会暂时开放一段时间,以确保在我标记为已接受之前没有其他方法。 ? @GarySabo 当然!希望有人提供更好的解决方案。【参考方案2】:我想到的一个骇人听闻的解决方案是:
在您的 VC 中声明标题,或保留引用:
private var header: UIView = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 40))
将其添加为tableView的子视图,并将内容插入设置为标题的高度。
tableView.addSubview(header)
tableView.contentInset.top = header.frame.height
如果您的标题使用自动布局,您需要调用
view.layoutIfNeeded()
设置内容前插入
然后让 header 始终粘在 tableView 的顶部:
func scrollViewDidScroll(_ scrollView: UIScrollView)
header.frame.origin.y = scrollView.contentOffset.y
【讨论】:
以上是关于滚动时如何使tableView单元格“粘”的主要内容,如果未能解决你的问题,请参考以下文章
tvOS tableView 从一个单元格到另一个单元格平滑滚动
如何使用 UIImage 从 tableview 单元格中的 url 平滑滚动
swift - 快速滚动时如何阻止tableview单元格出现故障和闪烁的图像?