this answer中详述的关于如何正确设置视图动画(如注释输入框)以保持在键盘顶部的技术,因为它可以很好地进行动画制作。使用键盘动画的曲线和持续时间,在视图底部和底部布局指南之间设置垂直高度约束,并将其设置为键盘框架的高度。
但是当你使用UITabBarController
并且屏幕底部有一个标签栏时,这不起作用 - 你的视图与键盘之间的高度差距最大,{...}}由于底部布局指南仍位于标签栏的顶部,但键盘覆盖标签栏,其框架的高度从屏幕底部计算。
简单地从键盘框架高度减去标签栏高度不起作用,因为这会影响动画。您可以在iOS 7上的iPhone Facebook应用程序中清楚地看到此效果;当您关闭键盘时,注释框和键盘之间存在间隙:
(尝试在iPhone Facebook应用程序的帖子上调用和解除键盘以自行查看动画效果。)
我可以想出几种方法来解决这个问题,我想知道是否有人尝试过这些或有更好的想法:
1)隐藏UITabBar,底部布局指南最终位于屏幕底部(如何?),然后键盘动画显示并在键盘动画显示之前再次显示
2)调整动画曲线/时间,使我的视图与键盘“保持同步”(最好不要猜测/黑客攻击)
3)将视图的底部约束附加到底部布局指南以外的内容(什么?)
答案 0 :(得分:1)
我一直在为此感到困惑,我找到了一个解决方案,它可能不太优雅,但确定
在您结束编辑并因此开始隐藏键盘的方法中,您可以使用调用此方法的NSTimer
scheduledTimerWithTimeInterval:0.05
开始:
NSTimer
:// define these once
textViewHeight = self.textView.frame.size.height;
tabBarHeight = self.tabBar.frame.size.height;
maxOrigin = self.view.frame.size.height - textViewHeight - tabBarHeight;
NSTimer
:CGFloat currentOrigin = self.textView.frame.origin.y;
if (currentOrigin > maxOrigin)
{
CGRect f = self.textView.frame;
f.origin.y = maxOrigin;
[self.textView setFrame:f];
[timer invalidate];
timer = nil;
}
通过这种方式,动画继续将其设置为已经存在的位置,并且视图保持在键盘上,直到它到达`maxOrigin'在y轴上