Дайте верхнюю вставку для UIRefreshControl

Я использую UIRefreshControl, как он (без UITableViewController):

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

Проблема заключается в том, что колесо обновления расположено под полупрозрачной панелью UINavigationController (ios7). В StackOverflow есть только несколько вопросов по этой проблеме. И они не принесли мне никакого ценного решения.

Я хочу, чтобы, например, сделать y y 80px моей UIRefreshControl.

Примечание. Я знаю, что не рекомендуется использовать UIRefreshControl вне UITableViewController. Поэтому нет необходимости предупреждать об этом.

ios,uinavigationcontroller,ios7,uirefreshcontrol,

13

Ответов: 3


29 принят

Я нашел решение, очень простое, не очень чистое, но похоже на обаяние.

Просто нужно поместить элемент управления обновлением в другое подразделение, которое установлено.

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];

0

Попытайтесь добавить это в viewDidLoad в свой UIViewController:

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

0

Это версия ответа AncAinu в Swift 4.

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)
ИОС, UINavigationController, ios7, uirefreshcontrol,
Похожие вопросы
Яндекс.Метрика