细胞重叠

时间:2014-12-17 16:00:53

标签: ios objective-c cocoa-touch uitableview ios8

我的iPhone应用中存在问题。有时,我主屏幕的UITableView的某些单元格重叠,但显示不正确。

以下是我的应用有时(很少)出现的方式:

enter image description here

我创建了两种类型的自定义UITableViewCell,带有一个xib文件来设计它们。

您对可能导致这种情况的原因有什么看法吗?这是iOS的错误,因为我已经在其他应用程序中注意到了这种错误。

感谢您的帮助。

更新:这是我的tableView:heightForRowAtIndexPath:方法。

我将根据两种类型的细胞返回正确的高度。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    Article *article = [self.articles objectAtIndex:[indexPath row]];

    if (article.isFeatured) {
        return 110;
    } else {
        return 75;
    }
}

4 个答案:

答案 0 :(得分:0)

除非你覆盖-tableView:heightForRowAtIndexPath:你的单元格的高度,所有单元格的标准高度都是44点。

在TableView委托中,您需要

- (CGFloat)tableView:(UITableView *) tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    CGFloat cellHeight = 44.0;

   //Calculate your cell height using indexPath and save it in cellHeight;
   // Then

   return cellHeight;
}

答案 1 :(得分:0)

试试这个

NSString *CellIdentifier = [NSString stringWithFormat:@"Cell %d",indexPath.row];

UITableViewCell *cell=[self.tableView cellForRowAtIndexPath:indexPath];

if (cell == nil)
{
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}    

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 30.0f;
}

答案 2 :(得分:0)

我认为你要根据你的内容动态计算你的细胞高度。

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    CGSize constrainedSize = CGSizeMake(self.view.frame.size.width - 30, FLT_MAX);

    NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
                                          [UIFont fontWithName:@"HelveticaNeue" size:14], NSFontAttributeName,
                                          nil];

    CGRect requiredHeight = [self.articles objectAtIndex:[indexPath row] boundingRectWithSize:constrainedSize
                                                                      options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
                                                                   attributes:attributesDictionary
                                                                      context:nil];

    return requiredHeight.size.height + 20;
}

答案 3 :(得分:0)

对于那些到达这里的人来说,我在iOS 11中遇到了完全相同的问题,而且很少发生。事实证明我在我的表视图中进行了一些动画编辑,但我有两个问题:有时这些更新发生在放置此表视图的控制器不在屏幕上时,因此表视图没有窗口;其他时候视图控制器在屏幕上,但动画在UIView.performWithoutAnimation块内(由于重构错误),如下所示:

UIView.performWithoutAnimation {
    tableView.beginUpdates()
    // a couple of calls to tableView.insertRows(at:with:) 
    // and tableView.deleteRows(at:with:)
    tableView.endUpdates()
}

在我的情况下,我删除了UIView.performWithoutAnimation并再次启用了动画,但如果您需要保持表格更新而不动画,我建议您删除对tableView.beginUpdates()和{{1}的调用使用动画tableView.endUpdates()进行更新,或者只调用.none。 我还检查了包含此表视图的视图控制器是否加载了视图及其tableView.reloadData(),如果不是,我只是执行view.window != nil而不是动画编辑。可能会检查tableView.reloadData()是否也会这样做。

我希望这有助于某人:)