【问题标题】:enable bouncing for only one direction UITableView仅对一个方向 UITableView 启用弹跳
【发布时间】:2013-08-01 20:57:31
【问题描述】:

我将如何让UITableView 在到达底部而不是顶部时反弹。本质上,我添加了一个UIImageView 作为我的TableView's 部分标题,但目前如果我拉到顶部,我的UIImageView 和我的UINavigationBar 之间有一个丑陋的空间。

我看了这个question,但我并不真正了解解决方案。有人介意详细说明吗?

【问题讨论】:

    标签: ios objective-c uitableview


    【解决方案1】:

    您链接到的问题有 2 种不同的解决方案。作为表格视图的代表,您已经是滚动视图的代表,因此您可以实现类似的东西(这是另一个问题中未标记为正确的答案...):

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
        scrollView.bounces = (scrollView.contentOffset.y > 10);
    }
    

    【讨论】:

    • 嗯,我收到以下错误:二进制表达式的操作数无效('CGPoint'(又名'struct CGPoint')和'int')。你知道这意味着什么吗?
    • 是的,这意味着我错过了 2 个字符。您无法将 CGPointint 进行比较...
    • 啊我明白了 =) 这个解决方案几乎可以完美运行。如果我非常快速地向上加速,它会在背景中闪烁一点。有没有办法防止这种情况发生?
    • 10 是一个任意值,您可以根据滚动视图的内容大小将其设置得更大。您还可以将检查放入不同的委托方法中(例如 scrollViewDidEndDragging:willDecelerate:)。
    • 为downvoting道歉,但这个解决方案stackoverflow.com/questions/17166983/…更好,因为在这个实现中,视图在更改反弹属性之前仍然在顶部略微滚动。基本上,没有必要操纵反弹属性
    【解决方案2】:

    contentOffset 是帧的原点 (0, 0) 和第一个单元格的原点之间的距离。

    最初,contentOffset 为零。如果您滚动到列表顶部(向下拖动手指),则 contentOffset 将为负数。如果您向下滚动列表(第一个单元格在框架上方),则 contentOffset 将为正数。

    #pragma mark - UIScrollViewDelegate 
    -(void)scrollViewDidScroll:(UIScrollView *)scrollView {
        CGFloat maxOffset = (scrollView.contentSize.height - scrollView.frame.size.height);
        CGFloat originOffset = 0;
        // Don't scroll below the last cell.
        if (scrollView.contentOffset.y >= maxOffset) {
            scrollView.contentOffset = CGPointMake(scrollView.contentOffset.x, maxOffset);
    
        // Don't scroll above the first cell.
        } else if (scrollView.contentOffset.y <= originOffset) {
            scrollView.contentOffset = CGPointZero;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多