【问题标题】:UIRefreshControl not showing indicator or title?UIRefreshControl 不显示指示器或标题?
【发布时间】:2014-03-16 08:28:15
【问题描述】:

我想通过使用UIRefreshControl 对我的UITableViewController 实施Pull To Refresh。这是我到目前为止所尝试的。

 - (void)viewDidLoad
    {
     .....
     ////********* Pull to refresh ************/
        UIRefreshControl *refresh = [[UIRefreshControl alloc] init];
        refresh.attributedTitle = [[NSAttributedString alloc] initWithString:@"Pull to Refresh"];
        refresh.tintColor = [UIColor magentaColor];
     //   [self.tableView addSubview:refresh];
// [self.refreshControl setEnabled:YES];
        [refresh addTarget:self action:@selector(pullToRefresh:) forControlEvents:UIControlEventValueChanged];
        self.refreshControl = refresh;

    }
    -(void)pullToRefresh:(UIRefreshControl *)refresh {
         [refresh beginRefreshing];
        refresh.attributedTitle = [[NSAttributedString alloc] initWithString:@"Refreshing.."];
        [self loadRecentActivities];
    }

但是当我拉动表格视图时,活动指示器和标题均不可见,但是会调用 pullToRefresh 并刷新表格。我的应用程序支持 iOS7.0+。 我错过了什么?任何帮助将不胜感激?

编辑:我已尝试使用我编辑的代码中提到的[self.refreshControl setEnabled:YES];[self.refreshControl setEnabled:YES];,但仍然没有运气。 这就是当我将它拉到刷新时我的 tableview 的样子-

最终解决方案:对于我使用的表格视图背景

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background.png"]];
self.tableView.backgroundView = imageView;

刷新指示器和标题被隐藏在self.tableView.backgroundView 后面而不是使用

[self.tableView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"background.png"]]];

它解决了我的问题。也非常感谢 Balram Tiwari 如果您仍有问题,请查看他的回答。

【问题讨论】:

  • UITableViewController 已经有一个 refreshControl,不需要再添加一个。
  • 那行在我的代码中被注释了,它没有任何区别。
  • 调用 [refresh beginRefreshing]。在 pullToRefresh 中就是这样。当你的任务完成时 [refresh endRefreshing];
  • 这有什么不同吗?
  • 这里回答了更好的解决方法,stackoverflow.com/a/18907625/753603

标签: ios objective-c ios7 uitabbarcontroller pull-to-refresh


【解决方案1】:

只需在refreshControl的初始化代码下添加self.tableView.backgroundView.layer.zPosition -= 1;即可。

【讨论】:

  • 此解决方案运行良好。在我的情况下,我的背景图片隐藏了UIRefreshControl...
【解决方案2】:

实际上,您的刷新控制器在 tableView 中,但它位于导航栏后面。 (听起来不一样,对吧),这是关键,

当您在 iOS7 中使用代码时,默认情况下 UIViewController 会占据 (edgesForExtendedLayout) 整个屏幕。这意味着您的 (0,0) 将从左上角开始,位于导航栏下方。

所以你的 tableView 实际上是从那里开始的。因此,要摆脱它,您只需在 viewDidLoad 方法中为您的 viewController 指定 edgesForExtendedLayout

if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
    self.edgesForExtendedLayout = UIRectEdgeNone;

之后它应该是可见的。

  • 上述修复之前:

  • 修复后。

希望有帮助。

【讨论】:

  • 也只需取消注释此行。 [self.tableView addSubview:refresh];
  • 它对我不起作用..我也认为它不是由于 edgesForExtendedLayout 因为你可以看到刷新我的 tableview 时有空间(标记为红色矩形)。
  • 仅供参考,我在 self.navigationController.view 上添加了一个子视图(请参阅屏幕截图中的呼叫/通话活动),我尝试删除它,但在任何一种情况下都不会出现刷新指示器。
  • 那么巴拉特的问题是什么?
  • edgesForExtendedLayout 和约束..无论如何你帮了我很多谢谢。
猜你喜欢
  • 2017-01-22
  • 2017-05-06
  • 1970-01-01
  • 2017-08-12
  • 2018-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多