我的目标很简单:
用户应该能够使用提供的按钮上下移动UITableView中的单元格。我希望新选择的单元格显示在旧选定单元格的确切位置,除了滚动位于tableview结束的开头。
我尝试使用
[table selectRowAtIndexPath:newIndexPath animated:false scrollPosition:UITableViewScrollPositionMiddle];
但问题是该行总是移动到靠近屏幕中心的相同位置,这是我不想要的。
我想以
为中心table.contentOffset.y
我正在以编程方式放置它。但是,当我用
设置时[table setContentOffset:CGPointMake(0, newVerticalContentOffset)];
所以我就这样做了。现在我遇到了滚动在桌子外面的问题,甚至是正常的反弹范围。让它“反弹”的唯一方法就是“反弹”。返回是用户滚动触摸列表。
我还尝试以编程方式将偏移设置为' min'和' max'它碰巧走出了那些界限。但是,我意识到这很复杂,因为我必须添加导航栏的高度和状态栏以获取顶部坐标并获取内容大小以确定底部。我认为如果只是一种以编程方式反弹的方式会更容易。或者'发布' tableview回到原位。我尝试用
这样的标志调用表的委托scrollViewDidScroll
这会导致我的应用程序崩溃。我意识到,即使我确实执行了最后两个解决方案中的一个,该行动仍然不能代表我的目标。如果我从顶部向下移动单元格,则视图会随之滚动。我不希望这种情况发生,因为它非常接近顶部。在这种情况下,在滚动视图之前,我不会介意它向中间移动。
到目前为止,我最好的想法是以某种方式试图中心滚动单元格,如果它能够居中(意味着它不在顶部或底部附近),而不是实际居中它。
我考虑过执行居中,然后检查y坐标是否正好改变1个单元格,如果是,则保留,否则使用旧位置。但是,我想用户可能位于列表中间附近,恰好距离中间1个单元。当他移动牢房时,它会意外地移动。这不是我想要的。