【问题标题】:iOS 10.0 UIRefreshControl not showing indicatoriOS 10.0 UIRefreshControl 不显示指示器
【发布时间】:2017-01-22 04:34:09
【问题描述】:

我正在使用具有下拉刷新功能的 UITableView,但是当我调用 [self.refreshControl beginRefreshing] 时,下拉刷新的微调器没有显示

上面的代码是在 viewDidLoad 内部调用的,因为表格最初正在加载一些数据。如果我在初始刷新后执行下拉刷新,微调器工作正常。显示标题,但不显示微调器。

似乎无法解决这个问题。它在 iOS 9.3.2 上运行良好,但在 iOS 10 上运行良好。

这是我目前使用的代码。

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self setupView];
    [self customSetup];
    self.refreshControl = [[UIRefreshControl alloc] init];
    self.refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"Updating Discounts..."];
    [self.refreshControl addTarget:self action:@selector(reloadDeals) forControlEvents:UIControlEventValueChanged];
    [self.refreshControl beginRefreshing];
    [self.tableView setContentOffset:CGPointMake(0, -self.refreshControl.frame.size.height) animated:YES];
}

提前感谢您的帮助

【问题讨论】:

  • 嗨。你好吗?你找到解决方案了吗?谢谢。问候。
  • 启用 UITableView 弹跳属性

标签: ios uitableview ios10 uirefreshcontrol ios9.3.2


【解决方案1】:

如果您的刷新指示器未显示,请尝试在 Interface Builder 中为表格视图或滚动视图启用 Bounce Vertically。

【讨论】:

    【解决方案2】:

    代码前:

    [refreshControl beginRefresh]

    插入代码:

    [refreshControl layoutIfNeeded]

    【讨论】:

    • 这为我解决了这个问题。感谢您的帮助。
    • 这对我来说不适用于 iOS 11。其他答案也没有:(
    • @fl034 你找到答案了吗?
    • 我最终延迟了beginRefreshing() 调用并将内容偏移设置为viewWillAppear 内的0.01 秒。仍然有一些小故障,但它“没关系”......@vivektakrani
    【解决方案3】:

    与@jpros 的答案相同,但速度很快

    if #available(iOS 10.0, *) {
        tableView.refreshControl = refreshControl
    } else {
        tableView.addSubview(refreshControl)
    }
    refreshControl.layoutIfNeeded()
    refreshControl.beginRefreshing()
    

    【讨论】:

      【解决方案4】:

      在 iOS10 中,我们应该使用 UITableView 或 UICollectionView 的 setRefreshControl 来添加 UIRefreshControl。

      if([self.tableView respondsToSelector:@selector(setRefreshControl:)]) {
          [self.tableView setRefreshControl:self.refreshControl];
      }
      else {
          [self.tableView addSubview:self.refreshControl];
      }
      [self.refreshControl layoutIfNeeded];
      [self.refreshControl beginRefreshing];
      

      【讨论】:

        【解决方案5】:

        我只能通过调用 viewDidLoad() 来解决这个问题:

        refreshControl.layoutIfNeeded()
        

        【讨论】:

          【解决方案6】:

          您需要致电 [self.view layoutIfNeeded] 以在 iOS 10 中修复它。就我而言,致电 viewDidLoad 就足够了(我在该项目中使用故事板)。对于其他情况,viewWillAppear 更适合。

          - (void)viewDidLoad
            {
             [super viewDidLoad];
             [self.view layoutIfNeeded];
             ...
          

          【讨论】:

          • 投反对票时请解释原因。否则没有意义
          • 这在初始化我的 tableView 后对我有用。例如,在viewWillAppear 上调用self.view.layoutIfNeeded。我正在使用 swift。
          • 这对我有用!谢谢!!我确实必须把它放在 viewwillappear 中,而不是 viewdidload 中。
          【解决方案7】:

          在 viewDidLoad 中延迟刷新调用对我有用:

              dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                  [self.refreshControl beginRefreshing];
          });
          

          【讨论】:

            【解决方案8】:

            这是 iOS 10 中已知和报告的错误。

            Radar rdar://27468436

            我不确定是否有任何解决方法。

            【讨论】:

            • 看到他们没有在 GM 中修复它,是否有可能,有变化并且我们需要做一些不同的事情?
            • 10.1 测试版发布,有人检查吗?
            猜你喜欢
            • 2014-03-16
            • 2017-05-06
            • 1970-01-01
            • 2017-03-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-05-06
            相关资源
            最近更新 更多