2017-01-10 3 views
-2

У меня есть обычное табличное представление с пользовательскими ячейками, отлично работающее на iOS 6.0, но после обновления приложения до iOS 10 возникает разрозненная проблема.cellForRowAtIndexPath: вызывается, но ничего не отображается в tableview

Примечание: приложение работает на iPhone 5 как на симуляторе, так и на реальном устройстве. Все устройства работают под управлением iOS 10.2, но iPhone 6 и выше имеют проблемы, описанные ниже.

Некоторые таблицы выглядят точно так же, как и раньше, в то время как один из tableViews всегда показывает ровно 1 ячейку (даже жесткая cellForRowAtIndexPath вызывается 7 раз), а другая таблица не показывает никаких ячеек, несмотря на то, что cellForRowAtIndexPath получает вызов дважды.

Мне интересно, почему метод вызывается, если tableview не хочет отображать результат?

У меня полная потеря относительно того, что происходит и как это исправить. Был у него в течение дня без какого-либо прогресса. Я попробовал очистить и запустить разные сборки и не могу заставить обработанные таблицы правильно вести себя. Я не знаю, что попробовать дальше? Любая помощь приветствуется, спасибо!

Хорошо, так как вам нужен код, это часть его, которая не так чувствительна. DataSource:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NOSUserInfo2 *userInfo = [S24SharedUserHandler currentUser]; 

    dataSource = [NSMutableArray arrayWithArray:[userInfo children]]; 

    if([userInfo student] || [userInfo teacher]) 
    { 
     [dataSource insertObject:userInfo atIndex:0]; 
    } 

    self.contentSizeForViewInPopover = CGSizeMake(250, 45*dataSource.count-1); 
    self.tableView.backgroundColor=[UIColor colorWithWhite:0.95f alpha:1]; 
    self.tableView.scrollEnabled=NO; 
    [self.tableView registerNib:[UINib nibWithNibName:@"NOSPersonSelectorCell" bundle:nil] forCellReuseIdentifier:@"PersonPopoverCell"]; 
} 

Это вызывается 2 раза:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"PersonPopoverCell"; 
    NOSPersonSelectorCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    cell.selectionStyle=UITableViewCellSelectionStyleNone; 

    cell.textLabel.font = [UIFont fontWithName:@"HelveticaNeue-Medium" size:15]; 

    cell.textLabel.backgroundColor=[UIColor clearColor]; 

    NSObject *dataObject = [dataSource objectAtIndex:[indexPath row]]; 

    if ([dataObject isKindOfClass:[NOSUserInfo2 class]]) { 
     cell.textLabel.text = [(NOSUserInfo2 *)dataObject name]; 
     cell.pk = [(NOSUserInfo2 *)dataObject personPK]; 
    } 
    else { 
     cell.textLabel.text = [(NOSChild2 *)dataObject childName]; 
     cell.pk = [(NOSChild2 *)dataObject childPK]; 
    } 

    cell.textLabel.textColor = [UIColor colorWithWhite:0.18f alpha:1]; 

    //NSLog(@"%d", [S24SharedUserHandler selectedPk]); 
    cell.checkmark.hidden=cell.pk!=[S24SharedUserHandler selectedPk]; 
    return cell; 
} 

И результат в том, что TableView пуст.

Новая информация 11 Янв 2017 Приложение работает при тестировании по телефону, но не на симуляторе. Я до сих пор не знаю, что не так, и я действительно разочарован в downvotes, которые я все еще получаю, чтобы задать этот вопрос. Я был бы признателен, если кто-нибудь сможет объяснить, почему они считают, что это плохой вопрос.

По-видимому, все работает на iPhone 5. Оно не работает на iPhone 6 и выше. Имейте в виду, что iOS по-прежнему 10,2, так как iPhone 5 и iPhone 6 и 7 также имеют iOS 10.2

Поскольку разница между рабочим и не работающим является устройством, а не версией ios, я теперь склоняюсь к нему являясь ошибкой UI, которая возникает только при определенных размерах.

Еще одна проблема, которая возникает в том, что мой gesturerecognizer также работает только на iPhone5 и не 6+

Новая информация!

Я могу исправить эту проблему, комментируя код heightForRowAtIndexPath. Это означает, что мне нужен другой способ настройки высоты определенных ячеек, и это текущая проблема. Я до сих пор не знаю, почему uitableview ведет себя так.

+2

Вам необходимо объяснить вашу модель данных и опубликовать все методы источника данных в виде таблицы. –

+0

Какой код вам нужен?У меня нет ничего экстраординарного, и, как я сказал, тот же код работает на другой платформе. Я только что не нашел никого, кто сказал бы, что cellForRow был вызван, но ничего не показывать – Ostmeistro

+0

@Ostmeistro хорошо, ваш код cellForRow был бы хорошим началом. Также возможно объяснение модели данных. Или, может быть, как вы создаете табличное представление, и его делегат/datasoruce – Fogmeister

ответ

1

Причина этой конкретной проблемы заключалась в том, что метод «heightForRowAtIndexPath» возвращает двойной на iPhone 5 и долгое время на iPhone 6, чтобы быть правильным, следует использовать определенный тип данных под названием «CGFloat»!

Нелегко было найти эту проблему, и я надеюсь, что смогу помочь кому-то другому в этом. Также спасибо всем, кто пытался помочь!

Смежные вопросы