iOS UITableViewController甚至在顶部滚动显示UIRefreshControl

时间:2016-01-29 04:40:59

标签: ios objective-c iphone uitableview uirefreshcontrol

我的UITableViewController的tableview面临一个非常奇怪的问题。在iOS 9.2中进行测试

我在故事板中为UITableViewController启用了“刷新”,并为valueChanged附加了它的IBAction。请注意,tableview具有使用“Plain”样式和自定义高度为45的节标题。

问题在于,通常你会期望拉下tableview相当大的量来触发刷新控制并开始旋转。

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

另请注意,即使它完全开始旋转并自动结束旋转,但我在IBAction中链接的用于刷新控制的方法实际上并未触发。

例如,我正在慢慢向上滚动,一旦我即将到达顶部,刷新控件将显示并向下移动tableview,开始旋转,停止旋转。所有这一切都没有拉出相当大的数量。

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

我从未见过这种问题。

由于其他原因,我无法使用自定义ViewView与自定义TableView,因此需要解决此问题。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

您可以通过编程方式添加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

答案 1 :(得分:0)

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