cellForRowAtIndexPath:被调用但没有显示在tableview中

时间:2017-01-10 13:07:31

标签: ios objective-c iphone uitableview

我有一个带有自定义单元格的普通tableview,在iOS 6.0上完美运行但是在将应用程序升级到iOS 10后,出现了分散的问题。

注意:该应用程序在iPhone 5上按预期工作,无论是在模拟器上还是在真实设备上。所有设备都运行iOS 10.2,但iPhone 6及更高版本具有下述问题。

一些tableviews就像以前一样工作正常,而其中一个tableViews总是显示1个单元格(即使是艰难的cellForRowAtIndexPath被调用7次),另一个表格显示没有单元格,尽管cellForRowAtIndexPath被调用两次。

我想知道为什么如果tableview不关心显示结果会调用该方法?

我完全不知道发生了什么以及如何解决它。已经有一天没有任何进展了。我尝试过清理和运行不同的版本,但无法使受影响的tableviews正常运行。我不知道下一步该尝试什么?感谢任何帮助,谢谢!

好的,因为你需要一些代码,这是它的一部分并不敏感。数据源:

- (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为空。

2017年1月11日新信息 该应用程序适用于手机测试,但不适用于模拟器。我仍然不知道出了什么问题,而且我仍然对这个问题感到失望。如果有人能解释为什么他们认为这是一个糟糕的问题,我将不胜感激。

显然一切都适用于iPhone 5.它无法在iPhone 6及更高版本上运行。请注意,iOS仍然是10.2,因为iPhone 5和iPhone 6以及7都有iOS 10.2

由于工作和不工作之间的唯一区别是设备,而不是ios版本,我现在倾向于它是仅在某些尺寸下发生的UI错误。

出现的另一个问题是我的手势识别器也只适用于iPhone5而不是6 +

新信息!

我可以通过评论heightForRowAtIndexPath代码来解决问题。现在这意味着我需要一些其他方法来调整某些单元格的高度,这是当前的问题。我仍然不知道为什么uitableview会这样做。

1 个答案:

答案 0 :(得分:1)

这个特殊问题的原因是方法“heightForRowAtIndexPath”在iPhone 5上返回一个double,在iPhone 6上返回long,为了正确,应该使用一个名为“CGFloat”的已定义数据类型!

找到这个问题并不容易,我希望我可以帮助其他人。也感谢任何试图提供帮助的人!