【问题标题】:UITableView bounce bottom edge onlyUITableView 仅反弹底部边缘
【发布时间】:2013-06-14 13:20:21
【问题描述】:

是否可以在底部反弹UITableView,但不能在顶部反弹?如果是这样,请给我看代码。

【问题讨论】:

    标签: ios swift objective-c uitableview uikit


    【解决方案1】:

    我没有更改bounces 属性,而是将其添加到UIScrollViewDelgate 方法中:

    -(void)scrollViewDidScroll:(UIScrollView *)scrollView
    {
        if (scrollView.contentOffset.y<=0) {
            scrollView.contentOffset = CGPointZero;
        }
    }
    

    【讨论】:

    • 这将阻止完全滚动到顶部
    • 最好设置bounds 而不是contentOffset 以避免第二次调用委托,特别是如果scrollViewDidScroll: 中有更多代码。
    【解决方案2】:

    对于 swift 4

    extension YourViewController: UIScrollViewDelegate{
        func scrollViewDidScroll(_ scrollView: UIScrollView) {
            if scrollView == tableView {
                let a = scrollView.contentOffset
                if a.y <= 0 {
                    scrollView.contentOffset = CGPoint.zero // this is to disable tableview bouncing at top.
                }
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      应该可以通过观察 UITableview 的 contentOffset 属性来实现。

      [_tableView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew context:NULL];
      

      。 .并防止偏移量变为负数。

      【讨论】:

      • UITableView 是 UIScrollView 的子类。 . .这给了我一个想法。 . .观察内容偏移。 .如果它变为负数,则锁定回零。
      【解决方案4】:

      我也遇到过这个问题,我的解决方法是:

      - (void)scrollViewDidScroll:(UIScrollView *)scrollView
      {
       if (scrollView.contentOffset.y > 100) {
           scrollView.bounces = NO;
       }else{
           scrollView.bounces = YES;
       }
      }
      

      我在我的项目中使用了这段代码,它运行良好。

      【讨论】:

        【解决方案5】:

        您可以尝试使用UIScrollViewDelegate 方法来检测拖动方向并适当调整bounces 属性吗?

        【讨论】:

        • 您好,当偏移量达到负值时,我尝试观察并将 tableview.bounces 更改为 NO,但是当 tableview 变为负值时会出现故障。您是如何避免的,如果您没有想到,请分享您的解决方案。
        【解决方案6】:

        斯威夫特

        func scrollViewDidScroll(_ scrollView: UIScrollView) {
        
             //Check to make sure this only applies to tableview 
             //and not other scrollviews inside your View/ViewController
             if scrollView.superclass == UITableView.self {
             //bounce will only be true if contentOffset.y is higher than 100
             //I set 100 just to make SURE, but you can set >= 0 too
                 scrollView.bounces = scrollView.contentOffset.y > 100
             }
                
        }
        
        

        【讨论】:

          【解决方案7】:

          在 Swift 2.2 中:

          func scrollViewDidScroll(scrollView: UIScrollView) {
              if scrollView.contentOffset.y <= 0 {
                  scrollView.contentOffset = CGPointZero
              }
          }
          

          【讨论】:

            【解决方案8】:
            -(void)scrollViewDidScroll:(UIScrollView *)scrollView
            {
                if (scrollView.contentOffset.y <= 0) {
                    scrollView.contentOffset = CGPointZero;
                    scrollView.showsVerticalScrollIndicator = NO;
                } else {
                    scrollView.showsVerticalScrollIndicator = YES;
                }
            }
            

            @Liron Berger 的解决方案会导致 VerticalScrollIndicator 仍然显示,只需将 showsVerticalScrollIndicator 设置为 NO 即可解决此问题

            【讨论】:

              猜你喜欢
              • 2015-11-19
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-08-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多