我有一个静态单元格的表视图.一个单元格包含a UITextView并且heightForRowAtIndexPath:是动态计算的,因此单元格总是足够高以容纳文本(该部分在iOS 7下进行了一些工作,实际上,因为它不再可能只是简单地询问textView contentSize).
当我在文本视图中点击开始编辑时,键盘动画到位,tableView上的contentInsets会自动调整以解决此问题(即,iPhone纵向方向的216px底部插入),光标/插入符号变为可见,然后表格视图滚动到另一个位置.它最终看起来像一个反弹.
以下是模拟器中的视频:https://www.dropbox.com/s/htdbb0t7985u6n4/textview-bounce.mov
请注意,插入符号位于键盘上方.我一直在记录表视图contentOffset,我可以看到它滚动到一个很好的值,然后突然"转身"并向后滚动.
奇怪的是,如果我在模拟器中打开慢动画,问题就会消失; 在contentOffset逆转不会发生的事情和工作,我希望(即iOS 6的行为).
以下是动画速度较慢的视频:https://www.dropbox.com/s/nhn7vspx86t4exb/textview-nobounce.mov
实施说明:
boundingRectWithSize:计算表视图高度,调整lineFragmentPadding和任何顶部/底部插入.似乎工作.scrollEnabled== YES 时没有注意到任何不同automaticallyAdjustsScrollViewInsets== YES在我的应用程序中,我有一个"主" NSPrivateQueueConcurrencyType上下文,它充当NSMainQueueConcurrencyType视图控制器依赖和传递的上下文的父级.我想这样做是为了利用异步保存(这个应用程序使用iCloud与核心数据,并节省了很多工作导出无处不在的日志).该设置类似于本文底部提到的Zarra方法
在应用程序中保存通常如下所示:
[context save:nil];
[context.parentContext performBlock:^{
[context.parentContext save:nil];
}];
Run Code Online (Sandbox Code Playgroud)
这似乎适用于小编辑/更新,但我对删除许多对象时所看到的内容感到困惑(例如,删除一个包含数百个与之相关的任务对象的项目).
在那种情况下,保存是异步的,但看起来主线程进入信号量等待情况(如我暂停调试器时所见)并且被有效阻止(我无法在UI中滚动),直到后台私有上下文完成保存.
实际上,我只是注意到单个对象的滑动删除删除会产生明显的延迟,尽管这种异步保存模式,所以看起来应用程序中的所有删除都很慢.
或者,如果我分配一个新的NSPrivateQueueConcurrencyType上下文,将其持久存储协调器设置为AppDelegate中的主PSC,并执行删除和保存,它仍然会做很多工作,但UI永远不会被阻止(但我不得不担心关于协调上下文,在主要上下文中重新获取).
我可能做错了什么想法,或者你也见过这种行为?