如何停止以大于屏幕高度的单元格为中心滚动

时间:2016-10-07 03:33:02

标签: ios swift xcode uitableview uiscrollview

我正在使用我在Github上找到的这个应用程序,它有这个代码,使滚动停止在一个单元格上。单元格是全屏大小,因此它停在单元格上,单元格占据整个屏幕。我在单元格之间添加了一个边框,它看起来很像,因为单元格非常接近全屏但不完全。然后我明白了在细胞后面添加背景,并使细胞比屏幕略高,但细胞内容仍然全屏。这样,用户只能在滚动时看到边框,然后当它执行自动滚动停止功能时," border"这实际上是一个空间,在屏幕外。这是一个完美的解决方案,但我遇到了麻烦。这是自动中心事物的神奇功能,但如果我让细胞大于屏幕高度,它会变得疯狂。

func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
        let cellHeight = targetContentOffset.memory.y / self.screenHeight
        let index = round(cellHeight)
        targetContentOffset.memory.y = index * self.screenHeight
    }

我尝试在这个代码中使用screenHeight的每个地方和两个地方添加4(这是&#34;空间&#34;它充当边框的大小)的屏幕高度,它永远不会起作用。如果我像这样添加4:

targetContentOffset.memory.y = index * self.screenHeight + 4

它几乎可以工作。它就像将一半的边框空间放在屏幕上并且对每个单元格一致地工作但是由于某种原因总是在屏幕上保留几个像素的边框。屏幕高度基本上就是UIScreen.mainScreen()。bounds.size.height。

当我按照我的方式添加4时,它总是比它应该高出4个像素,但是它始终如一,所以我需要在某处或其他地方添加另外4个像素。

1 个答案:

答案 0 :(得分:1)

好的,我让它运转了。我做的是我只在单元格的底部添加了+4,而不是在顶部添加了2,在底部添加了2。然后我在self.screenHeight中添加4的方法实际上有效。我认为这个工作的原因是因为它将间距添加到每个单元格的末尾,因此单元格仍然显示和居中完全相同,然后当您从一个单元格滚动到下一个单元格时,您只需滚动额外的4个像素并查看间距,但他们仍然停在同一个地方。