Self Sizing Cells使UITableView跳跃

时间:2015-02-23 13:35:36

标签: ios objective-c uitableview reloaddata

我有一个UITableView,每个单元格都有一个图像和两个标签,正如你在第一张图片上看到的那样

enter image description here

所以我尝试使用自我调整细胞,一切都很好,除了两件事:

1)第一个和第二个单元格没有正确显示内容,但在我向下滚动然后返回它们之后一切正常。我试图在viewDidAppear中使用[tableview reloadData],但它没有帮助。首先观看标签他们不适合。您可以在此视频https://www.youtube.com/watch?v=I9DGBl1c5vg

上观看

查看第一个单元格上的标签。

2)这是一个艰难的。我滚动表格,一切都很棒,但是当我选择行时问题就出现了。它推动我进入细节视图,但当我按下"返回"并返回主视图,tableview跳转,所以我不回到选定的行,如果我滚动表,它不会滚动平滑,但跳转。以下是两个视频的链接,第一个显示滚动顺畅https://www.youtube.com/watch?v=9wAICcZwfO4如果我没有进入详细视图,第二个显示跳跃问题https://www.youtube.com/watch?v=fRcQ3Za1wDM

它绝对确定与自我调整细胞有关,因为如果我不使用它,则不会发生这种问题。

2 个答案:

答案 0 :(得分:7)

好的,我解决了这两个问题。

问题1

我添加了这两行

[cell.contentView setNeedsLayout];
[cell.contentView layoutIfNeeded];

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath之前的return cell

问题2

解决方案似乎非常简单。我只需要实现viewWillDissapear并在其中重新加载数据,因此代码看起来像这样

- (void)viewWillDisappear:(BOOL)animated;{
    [super viewWillDisappear:animated];
    [self.tableView reloadData];
}

对我来说解决方案很简单,如果它对某人不起作用,我在这里找到了一些有用的链接 1)UITableView layout messing up on push segue and return. (iOS 8, Xcode beta 5, Swift)
2)http://useyourloaf.com/blog/2014/08/07/self-sizing-table-view-cells.html

答案 1 :(得分:4)

不幸的是,我相信你提出的两个问题都是IOS漏洞。

问题(1)

blog提出了一个简单的解决方法。

  

首次显示表格视图时,您可能会发现某些单元格的大小不正确。但是当您滚动表格视图时,新单元格将以正确的行高显示。要解决此问题,可以在视图出现后强制重新加载:

只需将以下内容添加到viewDidAppear方法即可。我测试过它并且效果很好。

[self.tableView reloadData];

问题(2)

第二个问题与以下问题重复:

IOS 8 UITableView self-sizing cells jump/shift visually when a new view controller is pushed

问题的作者本人提出了一种解决方法,这似乎没问题。但是,我还没有试过这个。

  

好的,我通过在sizeThatFits中缓存我的单元格高度来解决它,并在委托中为估计的单元格高度返回该值。工作得很漂亮。

随意提出其他建议解决方案的问题。