如何将集合视图单元格滚动到可见区域的中间
Posted
技术标签:
【中文标题】如何将集合视图单元格滚动到可见区域的中间【英文标题】:How can I scroll a collection view cell to the middle of the visible area 【发布时间】:2017-01-02 07:49:59 【问题描述】:我正在使用UICollectionView
创建单行单元格,用作index
以显示包含更多详细信息的表格视图部分。用户可以滚动单元格并通过滚动下面的UITableview
部分来选择显示相应详细信息的特定单元格。这工作正常。我希望一个特定的单元格大致位于可见单元格行的中间,当视图在上一个屏幕的segued
之后首次显示时。在集合视图中是否有与scrollTableTo
相媲美的东西?在How to scroll to a particular index in collection view in swift 中有对scrollToItem
的引用,但我需要帮助了解如何使用它。它在viewDidAppear
中编译和执行。 UITableview
按预期滚动。代码段单元格中的项目 i 是我要显示的项目。但是,单元格不会更改(列表中的第一项显示在左侧)。有效的是shouldSelectAt
中的相同语句。被选中的单元格在可见集中居中。
override func viewDidAppear(_ animated: Bool)
// DOES NOT WORK
var i = 0
for workorder in dm.workOrderNames
if (workOrderToBeDisplayed == workorder)
scrollTableTo(section: i, row: 0)
print("workorder = \(workorder) i = \(i)")
return
i = i + 1
workOrderView.scrollToItem(at:IndexPath(item: i, section: 0), at: .centeredHorizontally, animated: false)
func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool
// WORKS
workOrderView.scrollToItem(at:IndexPath(item: indexPath.item, section: 0), at: .centeredHorizontally, animated: false)
return true
【问题讨论】:
项目索引(i)是否正确更新?如果是,则在 dispatch async(主线程)中执行 scrollToItem。 视图控制器在主线程上。请参阅编辑后的代码以了解有效的情况。 【参考方案1】:你可以试试这个
override func viewWillAppear(_ animated: Bool)
self.yourCollection.scrollToItem(at: IndexPath(item: collectionSize/2, section: 0), at: .centeredHorizontally, animated: false)
【讨论】:
请说明为什么这样做可以更好地为未来的读者服务。谢谢!以上是关于如何将集合视图单元格滚动到可见区域的中间的主要内容,如果未能解决你的问题,请参考以下文章