У меня есть обычное табличное представление с пользовательскими ячейками, отлично работающее на 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 ведет себя так.
Вам необходимо объяснить вашу модель данных и опубликовать все методы источника данных в виде таблицы. –
Какой код вам нужен?У меня нет ничего экстраординарного, и, как я сказал, тот же код работает на другой платформе. Я только что не нашел никого, кто сказал бы, что cellForRow был вызван, но ничего не показывать – Ostmeistro
@Ostmeistro хорошо, ваш код cellForRow был бы хорошим началом. Также возможно объяснение модели данных. Или, может быть, как вы создаете табличное представление, и его делегат/datasoruce – Fogmeister