gpt4 book ai didi

ios - UITableViewCell 框架高度与 tableView 不匹配 :heightForRowAtIndexPath:

转载 作者:可可西里 更新时间:2023-11-01 03:55:11 26 4
gpt4 key购买 nike

我正在构建一个具有可变高度自定义表格单元格的 UITableView,它们的高度由包含的多行 UILabel 的大小决定。我已经连接了 tableView:heightForRowAtIndexPath: 委托(delegate)方法,并使用 sizeWithFont:constrainedToSize: 正确计算了最终高度。

我遇到了一个奇怪的问题:当调用数据源方法 tableView:cellForRowAtIndexPath: 时,正确的每行高度已经如上所述确定,但是单元格与该高度不匹配。相反,单元格的 frame.size.height 属性是表格 View 的默认单元格高度(86 像素,正如我在 Interface Builder 中设置的那样,当包含的 UILabel 具有只是一行文本),而不是 tableView:heightForRowAtIndexPath: 为该索引路径确定的正确高度。

我正在使用出列生成 cellForRowAtIndexPath: 中的单元格,也就是说,

// Using storyboards, this never returns nil, no need to check for it
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:@"SomeIdentifier"];
NSLog(@"%f", cell.frame.size.height); // 86, not correct if the cell contains a multi-line UILabel

看来,无论 iOS 在幕后做什么,出列都不会设置单元格的 frame 属性来匹配计算出的高度。这本身并不奇怪,出列本身与单元格实例有关,而不是它们的几何形状。不过,单元格呈现正确,因此高度属性被设置在某处,但它发生在 cellForRowAtIndexPath: 之后。

所以:当我最初填充表格 View 时,所有单元格的 cell.frame.size.height 都是 86,因为当我向下滚动列表时它们第一次出现。由于在第一个 cellForRowAtIndexPath: 之后的某个时间为每一行设置了正确的几何图形,因此当我向上滚动时,高度属性对于在重新使用后返回 View 中的每个单元格都是正确的。

在此之后我可以随意来回滚动表格 View ,从那时起每个单元格的高度属性保持正确。

在任何基于出列的重用发生之前,第一次获得正确单元格高度的正确方法是什么?我需要它来重新定位表格单元格的 subview 。我是否需要在 cellForRowAtIndexPath: 中手动调用 heightForRowAtIndexPath:,然后手动设置新创建的 CustomCell 实例的框架以匹配该高度?这似乎是多余的,我需要创建一种机制来检测何时使用错误的帧高度首次创建单元格,以及何时使用正确的帧高度将其出队以避免这种冗余。

因此,如果有人能阐明这背后的逻辑,我将不胜感激。

最佳答案

正如 Flexo 所建议的那样,自己回答这个问题显然比对问题进行编辑要好。所以,这是以前的编辑作为答案:


没关系,我应该更好地阅读文档。我可以在 UITableViewDelegatetableView:willDisplayCell:forRowAtIndexPath: 方法中获得正确的框架,因此这是根据设置的正确框架进行 subview 自定义的正确位置,而不是 cellForRowAtIndexPath:

不过,有趣的是文档是这样说的:

After the delegate returns, the table view sets only the alpha and frame properties, and then only when animating rows as they slide in or out.

...因为调用此委托(delegate)方法时正确的框架已经存在。但无论如何,问题解决了。

关于ios - UITableViewCell 框架高度与 tableView 不匹配 :heightForRowAtIndexPath:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11898596/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com