5

我的应用程序有自定义UITableView单元格。我想一次只显示一个单元格 - 下一个单元格应该部分显示。在 ScrollView 中,您可以设置isPagingEnabled为 YES。

但是我怎么能在上面做UITableView呢?

谢谢

4

3 回答 3

7

请注意,UITableView继承自UIScrollView,因此您可以在表格视图本身上设置pagingEnabled为。YES

当然,这仅在所有单元格和表格视图本身具有相同高度时才有效。

如果您希望在滚动后始终在表格视图的顶部开始一个单元格,您可以使用 aUIScrollViewDelegate并实现类似的东西。

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView
                     withVelocity:(CGPoint)velocity
              targetContentOffset:(inout CGPoint *)targetContentOffset
{
  UITableView *tv = (UITableView*)scrollView;
  NSIndexPath *indexPathOfTopRowAfterScrolling = [tv indexPathForRowAtPoint:
                                                       *targetContentOffset
                                                 ];
  CGRect rectForTopRowAfterScrolling = [tv rectForRowAtIndexPath:
                                             indexPathOfTopRowAfterScrolling
                                       ];
  targetContentOffset->y=rectForTopRowAfterScrolling.origin.y;
}

这使您可以调整滚动操作将在哪个内容偏移处结束。

于 2012-08-10T13:27:55.127 回答
0

Swift 5 基础版,但是效果不是很好。我需要对其进行自定义以供自己使用以使其正常工作。

func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
    if let tv = scrollView as? UITableView {
        let path = tv.indexPathForRow(at: targetContentOffset.pointee)
        if path != nil {
            self.scrollToRow(at: path!, at: .top, animated: true)
        }
    }
}

定制版

// If velocity is less than 0, then scrolling up
// If velocity is greater than 0, then scrolling down
if let tv = scrollView as? UITableView {
    let path = tv.indexPathForRow(at: targetContentOffset.pointee)
    if path != nil {
        // >= makes scrolling down easier but can have some weird behavior when scrolling up
        if velocity.y >= 0.0 {
            // Assumes 1 section
            // Jump to bottom one because user is scrolling down, and targetContentOffset is the very top of the screen
            let indexPath = IndexPath(row: path!.row + 1, section: path!.section)
            if indexPath.row < self.numberOfRows(inSection: path!.section) {
                self.scrollToRow(at: indexPath, at: .top, animated: true)
            }
         } else {
             self.scrollToRow(at: path!, at: .top, animated: true)
         }
    }
}
于 2019-09-01T01:49:42.150 回答
-1

我认为我根本不会为此使用 UITableView。

我想我会使用 UIScrollView 和一大堆分页内容。您可以在滚动活动上动态重建该内容,因此您可以模仿 UITableView 的内存管理。UIScrollView 会很高兴地进行垂直分页,这取决于它的 contentView 框架的形状。

换句话说,我怀疑让 UIScrollView 像表格一样比让 UITableView 像滚动视图一样分页更容易。

于 2012-08-10T11:58:53.043 回答