方法是针对ios5.0之后键盘高度随输入法不同变化时的解决办法,同时也适用于ios5.0之前
在-(void)viewDidLoad方法里面添加通知
if(IOS_VERSION<5.0)
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillHideNotification object:nil];
}else{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
}
至于如何获取IOS系统版本号通过如下可获取
#define IOS_VERSION [[[UIDevice currentDevice] systemVersion] floatValue]
添加一个方法-(void)keyboardWillShow:(NSNotification *)notification具体如下
-(void)keyboardWillShow:(NSNotification *)notification
{
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_3_2
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
#endif
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_3_2
NSValue *keyboardBoundsValue = [[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey];
#else
NSValue *keyboardBoundsValue = [[notification userInfo] objectForKey:UIKeyboardBoundsUserInfoKey];
#endif
CGRect keyboardBounds;
[keyboardBoundsValue getValue:&keyboardBounds];
NSInteger offset =self.view.frame.size.height-keyboardBounds.origin.y+64.0;
CGRect listFrame = CGRectMake(0, -offset, self.view.frame.size.width,self.view.frame.size.height);
NSLog(@"offset is %d",offset);
[UIView beginAnimations:@"anim" context:NULL];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:0.3];
//处理移动事件,将各视图设置最终要达到的状态
self.view.frame=listFrame;
[UIView commitAnimations];
}
}