12

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

4

8 回答 8

44

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

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (scrollView.contentOffset.y<=0) {
        scrollView.contentOffset = CGPointZero;
    }
}
于 2014-04-15T19:23:32.687 回答
8

对于迅捷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.
            }
        }
    }
}
于 2017-05-24T06:13:48.610 回答
4

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

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

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

于 2013-06-18T10:56:12.380 回答
4

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

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

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

于 2017-05-18T04:40:43.413 回答
2

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

于 2013-06-18T11:49:15.927 回答
1

迅速

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
     }
        
}

于 2021-04-11T09:28:45.180 回答
0
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (scrollView.contentOffset.y <= 0) {
        scrollView.contentOffset = CGPointZero;
        scrollView.showsVerticalScrollIndicator = NO;
    } else {
        scrollView.showsVerticalScrollIndicator = YES;
    }
}

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

于 2017-05-11T09:07:21.337 回答
0

在 Swift 2.2 中:

func scrollViewDidScroll(scrollView: UIScrollView) {
    if scrollView.contentOffset.y <= 0 {
        scrollView.contentOffset = CGPointZero
    }
}
于 2016-06-25T13:38:41.410 回答