今天写了一个项目,就类似于微信的聊天页面,底部有输入框,顶部是系统的导航条,键盘弹出时,整个view会自动向上移动,导航也随之向上移动了,页面如下:
弹出键盘后
这不是我想要的效果,我想键盘弹出时,导航的位置不变,想了很多办法,也增加了系统的很多方法,例如:
self.navigationController.hidesBarsWhenKeyboardAppears = false;
self.navigationController.hidesBarsOnTap = false;
self.navigationController.hidesBarsOnSwipe = false;
self.navigationController.hidesBarsWhenVerticallyCompact = false;
但是都没有效果。在网上查了资料,得到了解决办法:在当前页面添加如下方法:
-(void)loadView
{
UIScrollView *scrollview = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.view = scrollview;
}
loadView是系统的自带方法,并且在viewDidLoad之前被系统调用,该方法适合于加载自定义的view。
一般来说,系统会调用是xib或者storyboard来加载view,如果两者都没有view,则调用父类的loadView方法加载view,但也只是一个简单的view。当键盘弹出的时候,navigation会自动向上移动,如果不想让navigation向上移动,就需要重写该方法,重新把
[[UIScreen mainScreen] bounds]的大小赋值该当前view,这样navigation就不会向上移动了。
添加了该方法之后的效果图:
当然,底部的输入框要在键盘弹出和消失的时候调整坐标,这里可以通过系统的键盘弹出和消失的通知来完成。
另外,如果使用了第三方的IQKeyBoardManager来管理键盘的弹出和消失,如果键盘弹出,navigation也移动,则也可以通过该loadView方法解决