iOS Pull To Refresh не работает на определенных устройствах, таких как iPhone X

Я использую pull для обновления для обычного обновления данных в табличном представлении.

Вот мой код

-(void)addUIRefreshControl{

    //Instantiate and Configure Refresh Control

    self.refreshControl = [[UIRefreshControl alloc] init]; // initialize refresh control
    self.refreshControl.tintColor = [UIColor appBaseColor]; // set tint color
    [self.refreshControl addTarget:self
                            action:@selector(refreshAPI)
                  forControlEvents:UIControlEventValueChanged]; // add target

    [self.tableView addSubview:self.refreshControl]; // add the refresh control

}

-(void)refreshAPI{

    if ([APP_DELEGATE isNetAvailable]) {
        [self fetchAPI];
    }else{
        if (self.refreshControl) {
            [self.refreshControl endRefreshing]; //end refreshing
        }
    }
}

На устройствах iOS и симуляторе все работает нормально, за исключением iPhone X. Кто-нибудь может подсказать, что я делаю неправильно?

Спасибо


person Amit Majumdar    schedule 17.05.2018    source источник
comment
переместить контроль обновления в суперпредставление в viewDidAppear   -  person Nilomi Shah    schedule 07.08.2019


Ответы (1)


Ваше приложение только для iOS 10 и новее? Если это так, вы должны использовать закомментированную строку:

- (void)addUIRefreshControl{
    UIRefreshControl * refreshControl = [[UIRefreshControl alloc] init]; // initialize refresh control
    refreshControl.tintColor = [UIColor appBaseColor]; // set tint color
    refreshControl addTarget:self
                      action:@selector(refreshAPI)
            forControlEvents:UIControlEventValueChanged]; // add target
    if (self.tableView != NULL) {
        // tableView will have a strong reference (and retain) refreshControl ; no need to have it be its own property
        self.tableView.refreshControl = refreshControl
    } else {
        NSLog(@"suprise!  self.tableView is null");
    }
}

И вы всегда должны вызывать «endRefreshing», когда значение изменяется (или обновляется). Раньше вы звонили, только если isNetAvailable было ложным.

-(void)refreshAPI{

    if ([APP_DELEGATE isNetAvailable]) {
        [self fetchAPI];
    }

    [self.tableView.refreshControl endRefreshing]; //end refreshing
}
person Michael Dautermann    schedule 17.05.2018
comment
Привет, Майкл, я вызываю endRefreshing внутри своих обратных вызовов API. - person Amit Majumdar; 17.05.2018
comment
этот обратный вызов API не включен в пример кода, который вы указали в своем исходном вопросе? - person Michael Dautermann; 17.05.2018
comment
Нет, Майкл, это внутри метода fetchAPI. И я тоже попробовал ваш код. Но он по-прежнему не работает для iPhone X. Он отлично работает для других устройств. Это действительно странно - person Amit Majumdar; 17.05.2018
comment
если вы устанавливаете точки останова в Xcode, вызываются ли refreshAPI и fetchAPI? Можете ли вы поставить точку останова на endRefreshing и сработает ли она на iPhoneX? - person Michael Dautermann; 17.05.2018
comment
Нет, Майкл, метод селектора вообще не вызывается. Я продолжаю перетаскивать экран наполовину вниз, но он просто ничего не делает. - person Amit Majumdar; 17.05.2018
comment
Элемент управления обновлением вообще появляется? - person Michael Dautermann; 17.05.2018
comment
Да, он отображается нормально, но при перетаскивании он поворачивается на определенный угол, но не обеспечивает виброотклик или вызывает свой метод выбора. - person Amit Majumdar; 17.05.2018