UITableView在模拟器中看起来正确,在实际设备中看起来不对 - iPhone 4s

时间:2015-09-04 12:41:10

标签: ios objective-c iphone uitableview

我有一个UITableView可以在模拟器和iPhone 4s以外的所有设备上正常加载。我一直在寻找答案,甚至把它搁置到现在,希望我能想到一个解决方案,但似乎没有任何效果。

我尝试的解决方案是删除可能存在冲突的代码,现在注释如下。

// Remove seperator inset
if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
    //[cell setSeparatorInset:UIEdgeInsetsZero];
}

// Prevent the cell from inheriting the Table View's margin settings
if ([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]) {
    //[cell setPreservesSuperviewLayoutMargins:NO];
}

// Explictly set your cell's layout margins
if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
    //[cell setLayoutMargins:UIEdgeInsetsZero];
}

我目前的代码如下所示

- (int)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 4;
}

-(double) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == 3) {
        return 700.0;
    }
    return 44.0;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == 3) {
        static NSString *homeTableIdentifier = @"GeneralInfoTableViewCell";

        GeneralInfoTableViewCell *cell = (GeneralInfoTableViewCell *)[tableView dequeueReusableCellWithIdentifier:homeTableIdentifier];
        if (cell == nil)
        {
            NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"GeneralInfoTableViewCell" owner:self options:nil];
            cell = [nib objectAtIndex:0];
        }
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        return cell;
    } else if (indexPath.row == 2) {
...

请注意,我在此视图中删除了两次显示的徽标,这就是为什么“erbjudanden”在下面的错误视图中被切断的原因。

这就是iPhone 4s模拟器中的视图(正确方式)。

enter image description here

这就是实际iPhone 4s上的视图(错误的方式)

enter image description here

我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:0)

我在这里遇到问题,因为我的设备运行的是iOS 10,而我的模拟器运行的是iOS 9.3。

我怀疑视图层次结构调用的顺序略有不同,导致两者之间的显示不同。

在更新所需视图之前调用view.layoutIfNeeded()帮助了我。