UITableView滚动指示器不会隐藏在顶部或底部

时间:2012-10-28 17:51:01

标签: iphone objective-c ios

我有UITableView的问题。在以下情况之后它不会隐藏滚动指示器:

1)快速滚动

2)然后击中桌子的顶部或底部。

这是截图。

Screenshot of continiously showing scrollbar

如何确保滚动指示器按预期正确隐藏?

请注意弹跳已关闭。我也不想隐藏滚动指示器,我只是希望它在滚动停止在顶部或底部时按预期消失。

编辑:此问题似乎是由将视图控制器设置automaticallyAdjustsScrollViewInsets设置为false引起的。似乎需要设置以下3件事来重现问题:

1)表格视图退回需要关闭

2)视图控制器设置automaticallyAdjustsScrollViewInsetsfalse(这是为了解决滚动指示器看起来不正确的另一个问题)

3)UIViewController本身的视图不应该是表视图,表视图必须是子视图。

viewDidLoad中看起来像这样:

self.view_table = [[UITableView alloc] initWithFrame:self.view.frame];
self.view_table.bounces = false;
self.automaticallyAdjustsScrollViewInsets = false;

此外,表格视图的内容需要大于其框架的高度。

5 个答案:

答案 0 :(得分:9)

UITableView继承自UIScrollView,因此您需要使用UIScrollView的属性:

Property: showsVerticalScrollIndicator
A Boolean value that controls whether the vertical scroll indicator is visible.

看看the documentation

答案 1 :(得分:3)

试试这个:

-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{
    if (!scrollView.bounces) {
        targetContentOffset->y = -1;//Scrollbar does not move here, because bounces is disabled, but scrollbar can hidden.
    }
}

答案 2 :(得分:2)

执行以下步骤。

  1. 转到XIB
  2. 选择各自的表格
  3. 转到“属性”并禁用“水平和垂直滚动条”。

答案 3 :(得分:0)

根据范亚楠的回答,我得到了答案。

UITableViewDelegate中: 的目标C

-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{
    if (!scrollView.bounces) {
        if(targetContentOffset->y <= 1)
        {
            targetContentOffset->y = 0.01;
        }
        else if(targetContentOffset->y >= scrollView.contentSize.height - scrollView.height)
        {
            targetContentOffset->y = scrollView.contentSize.height - scrollView.height - 0.01;
        }
    }
}

Swift 4:

func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
    guard !scrollView.bounces else {
        return
    }

    if(targetContentOffset.pointee.y <= 1)
    {
        targetContentOffset.pointee.y = 0.01;
    }
    else if(targetContentOffset.pointee.y >= scrollView.contentSize.height - scrollView.height)
    {
        targetContentOffset.pointee.y = scrollView.contentSize.height - scrollView.height - 0.01;
    }
}

如果表格视图滚动到顶部或底部,则此代码会使其停止非常接近但不会结束。这允许滚动指示器消失。

答案 4 :(得分:0)

在viewwillLoad() 使tableView.showsVerticalScrollIndicator = false

禁用tableView的滚动操作视图中的滚动指示器