UITableViewCell 右 detailTextLabel 框在 reloadData 后调整大小

UITableViewCell right detailTextLabel frame resizes after reloadData

我有一个 UITableView,其中有一个 Right Detail 单元格并禁用滚动,table 的高度设置为 44(与单元格相同)。该单元格显示表示 class A 对象的数据。当用户点击该单元格时,它会推送一个带有 table 的新 VC 以选择一个新对象 class A .然而,当我跳回旧的 VC 并在 viewWillAppear 中调用 reloadData 时,detailTextLabel.frame 完全改变并且不可见。

所以在这个日志中,第一行是对 cellForRowAtIndexPath(对象 1)的初始调用,并且一切都正确显示。第二行是在选择对象 2 之后(detailTextLabel 的空字符串)。第三行是再次选择对象1后,之前有效的detailTextLabel现在不可见了

2015-03-28 10:48:11.747 dojo[32523:5852510] detail text label: <UITableViewLabel: 0x15d5de470; frame = (463 12; 42 20); text = '1234'; opaque = NO; autoresize = RM+BM; layer = <_UILabelLayer: 0x17429a810>>
2015-03-28 10:48:20.374 dojo[32523:5852510] detail text label: <UITableViewLabel: 0x15d5de470; frame = (468.5 13; 36.5 19.5); text = ''; autoresize = RM+BM; layer = <_UILabelLayer: 0x17429a810>>
2015-03-28 10:48:23.192 dojo[32523:5852510] detail text label: <UITableViewLabel: 0x15d5de470; frame = (505 13; 0 0); text = '1234'; autoresize = RM+BM; layer = <_UILabelLayer: 0x17429a810>>

我已经在故事板中使用正确的重用 ID 设置了 table 并正在调用 dequeueReusableCellWithIdentifier 来获取单元格;

更新:gist for VC

更新 2:我无法上传我的整个项目,但我创建了一个 demo project,其中的一部分真实代码(针对依赖项略有修改)也出现了同样的问题。

查看您的代码后,这似乎是 Apple 代码中的错误。如果我在设置文本后使用 sizeToFit(并且有一个 vehicle.number 可以看到),数字会出现,但是人字形会消失,直到您按下然后再次弹出;这绝对不是它应该的工作方式。当没有 vehicle.number 而不是空字符串时,您可以通过传递单个 space 作为文本来轻松绕过它。所以,

[cell.detailTextLabel setText: vehicle.number ? : @" "];

而不是这个,

[cell.detailTextLabel setText: vehicle.number ? : @""];

日志中的数字还落后;也就是说,您需要再次按下并弹出才能在日志中看到正确的帧,但标签和人字形都正确显示。