iOS UITableViewController 即使在顶部稍微滚动一下也会显示 UIRefreshControl

iOS UITableViewController even a little scroll at top shows UIRefreshControl

我的 UITableViewController 表格视图出现意外问题。在 iOS 9.2

中测试

我已经在情节提要中为 UITableViewController 启用了“刷新”功能,并附加了它的 IBAction for valueChanged。请注意,tableview 的部分 headers 使用“普通”样式和自定义高度 45。

问题是通常您会期望拉下 tableview 相当大的数量以触发刷新控件并开始旋转。

然而,在我的场景中,即使是一点点滚动也会使刷新控件出现并开始旋转。就像字面上的 2 厘米,这将使它出现。更奇怪的是,它会自动扩展高度,即使我什至没有将 tableview 拉到足以触发刷新。

另请注意,即使它开始完全旋转并自动结束旋转,但我在 IBAction 中为刷新控件链接的方法实际上还没有被触发。

例如,我正在缓慢向上滚动,当我即将到达顶部时,刷新控件将出现并将 tableview 向下移动,开始旋转,停止旋转。所有这一切都没有拉动 tableview 相当多。

请注意,在我的代码中,根本没有“beginRefreshing”。此外,我没有任何“scrollViewDidScroll”或“scrollViewDidDrag”等方法来触发刷新控件。

我从来没有见过这种问题。由于其他原因,我无法将自定义 ViewController 与自定义 TableView 一起使用,因此需要修复此问题。

您可以通过编程方式添加 UIRefreshControl,它会正常工作。这是一个简单的示例,其中 UIRefreshControl 不是 IBOutlet(我没有包括 tableView 数据源方法):

#import "ViewController.h"

@interface ViewController () <UITableViewDataSource>
@property (weak, nonatomic) IBOutlet UITableView *tableView;
@property (strong, nonatomic) UIRefreshControl *refreshControl;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.refreshControl = [[UIRefreshControl alloc] init];
    self.refreshControl.backgroundColor = [UIColor lightGrayColor];
    [self.refreshControl addTarget:self action:@selector(actionRefresh:) forControlEvents:UIControlEventValueChanged];
    [self.tableView addSubview:self.refreshControl];
}

- (void)actionRefresh:(id)sender {
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [self.refreshControl endRefreshing];
    });
}

// ...UITableView dataSource methods

@end

我可以通过删除应用程序并在清理和重建后重新安装来解决它。非常奇怪的问题,我花了很多时间但现在已经解决了!