【问题标题】:Auto-layout issue on scroll滚动时的自动布局问题
【发布时间】:2015-08-04 14:31:38
【问题描述】:

我有.xib,它有一些像这样的自动布局(可能需要点击放大):

没什么特别的,我有13pt 与superview 的边框间距。 然后将此 xib 在代码中加载到 tableViewCell 中。

我还在表格的viewDidLoad 中设置高度,如下所示:

[self.tableView setEstimatedRowHeight:40];
[self.tableView setRowHeight:UITableViewAutomaticDimension];

我的 cellForRowAtIndexPath 是:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseId forIndexPath:indexPath];

---OR---(两者都没有区别)

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseId];

现在乐趣开始了。自动布局在需要时工作,有时我将一个单元格滚动到视野之外,将其带回来,它的大小不一样。见下图:

关于我做错了什么有什么想法吗?

PS:这里不在屏幕截图中,但我确实有一些带有大量文本的单元格,看起来与左侧大单元格的高度相同。

PPS:我尝试了以下但没有成功(基于这篇文章http://useyourloaf.com/blog/2014/08/07/self-sizing-table-view-cells.html):

  • 在 viewDidLoad 中添加了[self.tableView reloadData];
  • 我删除了标签上的明确和首选宽度

【问题讨论】:

  • 你是否也在heightForRowAtIndexPath函数中设置了这个单元格的高度?
  • 我正在这样做[self.tableView setEstimatedRowHeight:40]; [self.tableView setRowHeight:UITableViewAutomaticDimension];
  • 能否提供您的 cellForRowAtIndexPath?
  • @Doro 已添加。我在答案中尝试了您的建议,但没有奏效:(
  • 你有 13 个点间距而不是 13 个像素

标签: ios xcode autolayout interface-builder


【解决方案1】:

我遇到了同样的问题,如果您将标签的文本专门设置为 - tableView:willDisplayCell:forRowAtIndexPath: 而不是 - tableView:cellForRowAtIndexPath:,那么您将观察到随机大小不正确的单元格的行为。

我创建了一个测试项目来演示这个https://github.com/sja26/iOS-TestSelfSizingCellsWithUILabel

【讨论】:

    【解决方案2】:

    你得到这种行为的一个原因 - 你使用

    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    

    尝试使用

    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    

    相反。这将根据需要以相同大小重复使用您的单元格

    当然,检查heightForRowAtIndexPath 方法以正确设置值

    【讨论】:

    • 还是从大跳到小:(
    猜你喜欢
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多