【发布时间】: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。
-
视图控制器在主线程上。请参阅编辑后的代码以了解有效的情况。
标签: ios uicollectionview swift3