私は[Pull down to refresh]機能を持つUITableViewを使用していますが、[self.refreshControl beginRefreshing]を呼び出したときに、Pull down to refresh機能のスピナーが表示されません。
上記のコードは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];
}
よろしくお願いします
コードの前:
[refreshControl beginRefresh]
コードを挿入:
[refreshControl layoutIfNeeded]
ViewDidLoadでの更新呼び出しの遅延は私にとってはうまくいきました:
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self.refreshControl beginRefreshing];
});
IOS 10で修正するには、[self.view layoutIfNeeded]
を呼び出す必要があります。私の場合、viewDidLoad
を呼び出すだけで十分でした(そのプロジェクトでストーリーボードを使用していました)。その他の場合は、viewWillAppear
の方が適しています。
- (void)viewDidLoad
{
[super viewDidLoad];
[self.view layoutIfNeeded];
...
@jprosと同じですが、Swift
if #available(iOS 10.0, *) {
tableView.refreshControl = refreshControl
} else {
tableView.addSubview(refreshControl)
}
refreshControl.layoutIfNeeded()
refreshControl.beginRefreshing()
私はviewDidLoad()から呼び出すことでこれを修正することができました:
refreshControl.layoutIfNeeded()
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];
更新インジケーターが表示されない場合は、テーブルビューまたはスクロールビューのInterface BuilderでBounce Verticallyを有効にしてみてください。