【问题标题】:iOS 8 Auto height cell not correct height at first loadiOS 8 自动高度单元格在第一次加载时高度不正确
【发布时间】:2015-03-03 11:08:43
【问题描述】:

我有一个 iOS 8 应用程序,其中有一个搜索结果页面,每个单元格都会根据某个标签的高度自动调整大小。但是,在视图首次加载后,显示的单元格不会自动调整大小。向下滚动后,随后的单元格大小正确。我正在我的故事板中连接自动布局约束。我在 viewDidLoad 中有以下代码。

- (void)viewDidLoad {
    [super viewDidLoad];

    //configure tableView so that we use autolayout enabled row heights
    self.tableView.estimatedRowHeight = 68;
    self.tableView.rowHeight = UITableViewAutomaticDimension;
}

有其他人经历过吗?

【问题讨论】:

  • 你解决过这个问题吗?我也有同样的问题。
  • 你可以通过给出这个answer.来解决这个问题希望对你有帮助。

标签: ios uitableview ios8 autolayout


【解决方案1】:

是的,我在情节提要中制作视图和约束时也遇到了同样的问题(但没有添加代码的视图)。我已经通过在自定义单元类中添加此代码来解决此问题,

-(void)didMoveToSuperview { 
    [self layoutIfNeeded];
}

这可能会去其他地方,但是这个方法似乎只调用了一次,所以我认为这是一个很好的地方。

【讨论】:

  • 谢谢。这解决了我的问题。有谁知道这是一个错误,还是做错了什么的症状?
  • 我必须在加载数据的函数中删除 self layoutIfNeeded 但此解决方案有效,谢谢
  • 工作——谢谢。 @dennis 我会把它放在错误类别中。
  • 我遇到了同样的问题,但只需要在 OP 的 viewDidLoad 中添加 estimatedRowHeightrowHeight 行 - 我以前只有 Interface Builder 中的设置(此时,我不确定是否应该大写)。
  • 不幸的是没有工作。还有其他建议吗?您使用的是尺寸等级吗?根据其他 SO 答案,大小类似乎会导致问题。
【解决方案2】:

rdelmar 的回答对我不起作用。

我所做的是添加了这段代码:

[tableView setNeedsLayout];
[tableView layoutIfNeeded];
[tableView reloadData];

在获取数据并首先调用[tableView reloadData] 之后,在我的例子中,它位于我的视图控制器的viewDidLoad 方法中。

所以结果代码是:

NSArray *fetchedData = ...

[tableView reloadData]; //Fist table reload
[tableView setNeedsLayout];
[tableView layoutIfNeeded];
[tableView reloadData]; //Second table reload

这个答案取自这里:http://useyourloaf.com/blog/self-sizing-table-view-cells.html#comment-1783719287

【讨论】:

  • 非常感谢您的回答! (Y)。效果很好。
  • 我不敢相信这个 hack 有效,但是非常感谢!我一直在努力解决这个问题......
  • 对我来说,将 tableView.layoutIfNeeded() 添加到 ViewDidLoad() 就可以了。感谢您向我指出这一点!
【解决方案3】:

我认为与其在viewDidLoad 中强制使用tableView.reloadData()tableView.layoutIfNeeded(),不如在viewWillLayoutSubviews() 中设置tableView 的自动高度:

斯威夫特:

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    tableView.estimatedRowHeight = 300
    tableView.rowHeight = UITableViewAutomaticDimension
}

【讨论】:

    【解决方案4】:

    我遇到了同样的问题,并通过将分配给单元格的 UILabels 的文本属性(这是唯一可能影响我的特定单元格中的高度计算的组件)移动到:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    代替:

    -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

    在执行此操作之前,我注意到如果单元格暂时滚动到屏幕外然后又回到视图中,则单元格高度将被正确计算。很可能是因为此时单元格具有确定最终高度的 UILabel 内容的必要信息。

    【讨论】:

      【解决方案5】:

      我能够通过不使用笔尖/故事板而是以编程方式完成布局来解决这个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-14
        • 2014-12-24
        • 2014-11-20
        • 2014-10-30
        • 2015-06-04
        相关资源
        最近更新 更多