我有一个包含静态单元格的表视图。其中一个单元格包含一个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
实现说明:
- 文本框是粉色的,具有AutoLayout约束,将其固定在单元格上0距离(除了左侧,即10pt)
- 我使用
boundingRectWithSize:
来计算tableView的高度,调整lineFragmentPadding和任何顶部/底部插入。看起来没问题。
scrollEnabled
== YES时,没有注意到任何不同之处。automaticallyAdjustsScrollViewInsets
== YES。