Nat*_*own 57 uitableview ios ios6 ios7
自从开始用iOS 6(以及iOS 7)编译我的应用程序以来,我已经开始看到这条消息了.我知道UITableViews管理单元格的方式在iOS 6中是不同的,但我不需要修改我的代码以便继续工作.但是我担心这个消息可能指向一些我还没有看到的潜在问题.谁能摆脱任何光明?
mlu*_*own 132
我开始在iOS 7 beta 5以后的日志中显示此错误,包括在iOS 7 GM/Release版本中,同时从未在我的iOS 6应用程序或早期的iOS 7测试版中发生过这种错误.经过大量的实验,我找到了原因:
我正在使用UITableViewCell对象作为节标题视图并将其返回tableView:viewForHeaderInSection:.这似乎是常见的做法,特别是在iOS 5之后,当使用Interface Builder在StoryBoard中将部分标题视图设计为原型表视图单元变得容易时.
当我更改我的应用程序以使用常规UIView子类用于我的节标题视图时,错误消失了,更重要的是,我的表视图停止随机删除节标题!
看起来(因为iOS 7 beta 5)UITableView在内部维护UITableViewCell其视图层次结构中的所有对象及其各自的索引路径的映射.由于节标题(或页脚的表视图标题)没有索引路径,如果UITableViewCell对这些视图使用对象,则表视图在找到UITableViewCell没有索引路径的表时会感到困惑,导致"没有表格单元被重用的索引路径"错误,如果你不走运,在表视图中显示毛刺:
更新:如果您可以访问Apple Dev论坛,请参阅以下内容(我开始):https://devforums.apple.com/message/882042#882042
正如该线程中所建议的那样,如果您不想重新考虑很多因素,可以创建一个UIView包装器UITableViewCell并将其作为节头视图返回.
UIView *view = [[UIView alloc] initWithFrame:[cell frame]];
[view addSubview:cell];
return view;
Run Code Online (Sandbox Code Playgroud)
但是请注意,这种"包装" UIView方法不能很好地与AutoLayout和设备旋转一起使用,因此我建议您使用UIView子类来表示页眉和页脚单元格,而不是UITableViewCell如答案主要部分所述的子类.
mar*_*idt 41
我将返回UITableViewCell的contentView,而不是创建一个包装器.在storybord中记住约束-jabble
return cell.contentView;
Run Code Online (Sandbox Code Playgroud)
mpp*_*dev 26
我遇到了同样的问题,我花了几个小时才找到问题.结果我[textField becomeFirstResponder]在设置单元格时调用(这里textField是自定义tableviewcell的一部分); [textField becomeFirstResponder]反过来发布了keyboardWillShow通知,这反过来导致tableview过早地加载自身,从而导致臭名昭着的" 没有索引表单元格的索引路径 "消息.一旦我删除了该调用,问题就消失了.
Rob*_*Rob 16
除了接受的答案(mluisbrown),我需要在标题单元格中添加一个autoresizingMask,因为我的包含一个多行标签,即
UIView *view = [[UIView alloc] initWithFrame:[cell frame]];
cell.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
[view addSubview:cell];
return view;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25086 次 |
| 最近记录: |