遇到一个奇怪的问题, TableView 需要触摸一下才显示出来,否则等 10 秒以上自动显示。

2015-04-10 22:59:04 +08:00
 babyname
我通过网络加载数据才出现这种情况。

通过 debug 发现,启动后请求远程数据,然后执行了 tableView.reload ,调用 tableView(tableView: UITableView, numberOfRowsInSection section: Int) 可以返回正确的 rows 但是后续却没有执行 tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 方法,如果此时触摸(随便滚动一下)就会执行该方法,显示数据。否则,等待大概10秒,才会自动显示数据。

有遇到过的吗?可能是什么原因?
2900 次点击
所在节点    iDev
7 条回复
tane05
2015-04-11 00:04:05 +08:00
这个有点玄学, 掉到numberOfRowsInSection说明tableView在布局计算了.
确定numberOfRowsInSection 返回值大于0?
确定没其他因素干扰tableView的contentsize属性?
babyname
2015-04-11 00:30:51 +08:00
@tane05 搞好了,线程问题,异步加载的数据,然后回调方法中 reloadData 所以不行,需要手动拖动 TableView 使其重汇 UI,通过

func didRecevedResults() {
// some...
dispatch_async(dispatch_get_main_queue(), {
self.tableView.reloadData()
}
}
就好了
kshatriya
2015-04-11 04:04:34 +08:00
记得还要+ (BOOL)requiresConstraintBasedLayout
{
return YES;
}
Elethom
2015-04-11 08:19:34 +08:00
看標題就知道是沒在主線程執行,接觸 iOS 應用程式開發一週內的新手偶爾會犯的錯誤。看一下 UIKit 文檔吧,少年。
babyname
2015-04-11 08:41:16 +08:00
@Elethom 谢谢,文档没怎么看,麻烦解释下为什么不在主线程执行也会显示 只是会延迟?
Elethom
2015-04-11 09:07:36 +08:00
likid
2015-04-11 09:36:55 +08:00
All UI must be updated on main threadhttp://stackoverflow.com/questions/24895175/ios-tableview-reloaddata

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/182951

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX