14

我使用类似的 UIRefreshControl(没有 UITableViewController):

UIRefreshControl *refreshControl = [UIRefreshControl new];
[refreshControl addTarget:self action:@selector(viewDidBeginRefreshing:) forControlEvents:UIControlEventValueChanged];
[self.table addSubview:refreshControl];

问题是刷新轮位于 UINavigationController 的半透明栏 (ios7) 下方。StackOverflow 上关于这个问题的话题很少。他们没有给我带来任何有价值的解决方案。

例如,我希望将 UIRefreshControl 的 y 位置向下 80px。

注意:我知道不建议在 UITableViewController 之外使用 UIRefreshControl。所以没有必要警告它。

4

3 回答 3

30

我找到了一个解决方案,非常简单,不是那么干净,但就像一个魅力。

只需要将刷新控件放在另一个设置的子视图中。

UIView *refreshView = [[UIView alloc] initWithFrame:CGRectMake(0, 80, 0, 0)];
[self.table addSubview:refreshView];

UIRefreshControl *refreshControl = [UIRefreshControl new];
[refreshControl addTarget:self action:@selector(viewDidBeginRefreshing:) forControlEvents:UIControlEventValueChanged];
[refreshView addSubview:refreshControl];
于 2013-10-22T07:23:08.920 回答
2

这是 Swift 4 中 AncAinu 答案的一个版本。

let refreshView = UIView(frame: CGRect(x: 0, y: 80, width: 0, height: 0))
tableView.addSubview(refreshView)

refreshControl = UIRefreshControl()        
refreshControl.addTarget(self, action: #selector(self.viewDidBeginRefreshing), for: .valueChanged)        
refreshView.addSubview(refreshControl)
于 2018-07-12T10:04:13.127 回答
0

尝试将其添加到您的 viewDidLoad 中UIViewController

if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
    self.edgesForExtendedLayout = UIRectEdgeNone;
于 2013-10-21T16:09:28.203 回答