【发布时间】:2013-11-21 21:16:23
【问题描述】:
我正在 Xcode 5 上构建一个面向 iOS 6+ 的应用程序。
我无法使用自定义单元格构建表格视图。有趣的是,在我今天更新到 Xcode 5.0.2 之前它运行良好(我不知道发生了什么变化)。当我弄乱了 iOS 7 SDK 附带的白色导航栏样式(我也不知道它们如何相互链接)时,我的表格视图也确实绘制了纯白色(下面的屏幕截图)。无论如何,当我从代码中删除灯光状态栏选项时,我的表格视图过去可以正常绘制,尽管我有黑色状态栏。今天,在安装 Xcode 5.0.2 之后,我在不更改任何代码的情况下构建了相同的项目,并且我的表格视图现在在 iOS 7(设备和模拟器)上绘制为纯白色。当我切换到 iOS 6 时,它显示完美(设备和模拟器)。我试过清理构建文件夹,清理派生数据文件夹,重新启动 Xcode/simulator/device,但没有任何改变。此外,该应用程序开始显示白色状态栏,这在更新 Xcode 之前没有。我知道它们应该无关紧要,但我现在很难开发我的应用程序。单元格接收所有触摸事件,表格视图确实滚动,我在输出中得到所有NSLogs,向下滚动时我可以看到滚动条。它只是不画画。我的自定义单元格中有自定义 drawRect: 代码。在看到 UITableViewCell custom CG drawing iOS 7 和 subclassed UITableViewCell - backgroundView covers up anything I do in drawRect 之后,我注释掉了该代码,但它没有帮助。这是我在 iOS 7 上得到的结果(选定的单元格为灰色):
这是 iOS 6 上的同一个应用程序(模糊的文本/图像以保护隐私):
这是-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath的代码:
MyFriendViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"friendTableCell"];
if(!cell){
cell = [[[NSBundle mainBundle] loadNibNamed:@"MyFriendViewCell" owner:self options:nil] lastObject];
}
/* some code that sets text fields/images */
[...]
return cell;
我有一个 XIB 文件(只有一个对象,我的自定义单元格类)和一个对应于该单元格的类。我一开始就注册了我的手机:
[self.tableView registerNib:[UINib nibWithNibName:@"MyFriendViewCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"friendTableCell"];
我已经检查了方法中的cell,无论如何,出队永远不会返回nil。
更新:我还意识到,我的应用在 iOS 6(即使它运行正确)和 iOS 7 上的此屏幕上空闲时使用 100% CPU。
重要提示:问题已得到解答,但对于任何想知道drawRect: 的人来说,问题与此无关,我仍在使用自定义drawRect: 和效果很好。
【问题讨论】:
-
可以分享cellForRowAtIndexPath方法的代码吗?
-
@Ilario 我已经编辑了我的问题。
-
请注意,dequeueResusableCellWithIdentifier 现在将始终返回构造的单元格。如果一个不存在,它会为您创建它。不再需要 if(!cell) 语句。
-
旧习惯 :) 我会改掉的,谢谢。
标签: ios uitableview ios7