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

标签 ios swift xcode uitableview uiscrollview

我正在玩这个我在 Github 上找到的应用程序,它有这段代码可以让滚动停止在一个单元格上。单元格是全屏大小,因此它会停在一个单元格上,并且该单元格会占据整个屏幕。我在单元格之间添加了一个边框,它看起来有点不对劲,因为单元格非常接近全屏,但又不完全是。然后我想到了在单元格后面添加背景,并使单元格略高于屏幕,但单元格内容仍然是全屏的好主意。这样用户只能在滚动时看到边框,然后当它执行自动滚动停止功能时,实际上是一个空格的“边框”不在屏幕上。这是完美的解决方案,但我很难做到。这是自动居中的神奇功能,但如果我使单元格大于屏幕高度,它就会变得疯狂。

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(这是充当边框的“空间”的大小)添加到 screenheight,但它从来没有完全起作用。如果我像这样添加 4:

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

它几乎可以工作。它就像把一半的边界空间东西从屏幕上移开,并且对每个单元格都一致地工作,但由于某种原因总是在屏幕上保留几个像素的边界。 screenheight 基本上就是 UIScreen.mainScreen().bounds.size.height。

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

最佳答案

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

关于ios - 如何停止以大于屏幕高度的单元格为中心的滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39908932/

相关文章:

ios - 在 UICollectionViewCell 中添加带计时器的倒计时标签的最佳方法,即使在单元格被重用后也能正常工作

ios - 更新 iOS 国际化的翻译

ios - 从 nsurlconnection 委托(delegate)方法返回响应数据

ios - 快速解析 : How to Push Notification To a Specific Device/objectId

cocoa-touch - 如何在 Xcode 标签中设置换行符?

iphone 开发 : how to check if an object located on the phone's screen

ios - Objective C 项目中 ScrollableGraphicView Swift 库的问题

Swift:字典数组在初始化后计数为 1 但应该为 0

ios - 如何使用共享 Storyboard设计加载正确的 UIViewController?

swift - Cryptoswift 框架未被访问