我建设有可变高度定制表格单元,通过包含多行的UILabel的大小来确定它们的高度一个UITableView。 我已经得到了tableView:heightForRowAtIndexPath:
委托方法有线和使用正确计算最终高度sizeWithFont:constrainedToSize:
我经历了奇怪的问题,借着当时的数据源方法tableView:cellForRowAtIndexPath:
被调用时,正确的每行高度已经如上所述确定,但细胞的帧高度不匹配。 相反, frame.size.height
细胞的属性是表视图的默认单元格高度(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的是做幕后,离队不设置单元格的边框属性以匹配计算高度。 这本身并不奇怪,出列关注的是电池的情况下,不是他们的几何形状。 细胞被正确地呈现,不过,这样的高度属性被设置的地方 ,但它之后会发生cellForRowAtIndexPath:
所以说:当我最初填充表视图, cell.frame.size.height
是所有细胞86,因为它们出现在第一次时,我向下滚动列表。 由于正确的几何形状是第一之后的某个设定cellForRowAtIndexPath:
每一行之前它显示的,当我向后滚动起来,高度属性是自带回到视图中被重用后,每个单元正确的。
在此之后,我可以随意滚动表视图来回,和height属性仍然是从这一点上来说每个单元正确的。
什么是围绕得到正确的单元格高度在第一时间,任何基于出列重用发生之前的正确方法是什么? 我需要这个做一些表格单元格的子视图的重新定位。 我是否需要手动调用heightForRowAtIndexPath:
在cellForRowAtIndexPath:
然后手动设置新创建CustomCell实例的框架相匹配的高度? 这似乎是多余的,而且我需要建立一个机制,当第一次与错误帧的高度与创建细胞,当它与正确的帧高度离队后,以避免这种冗余检测。
所以,如果有人可以提供一些线索到逻辑的背后是这算什么,我将不胜感激。