鍵盤高度是不一樣的所以不能寫死 需要根據(jù)彈出的鍵盤動(dòng)態(tài)獲取
第一步
在需要的地方注冊(cè)監(jiān)聽
//監(jiān)聽鍵盤尺寸改變(包含鍵盤彈出)
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillChangeFrame:)
name:UIKeyboardWillChangeFrameNotification
object:nil];
/*
有些地方說這里監(jiān)聽`UIKeyboardWillShowNotification` 但是這個(gè)監(jiān)聽僅僅只是監(jiān)聽鍵盤彈出這一個(gè)事件
如果在鍵盤彈出期間鍵盤改變了尺寸是無法監(jiān)聽到的
比如 彈出的鍵盤高度是88 你能監(jiān)聽到 然后切換了鍵盤類型 鍵盤變成了40高 鍵盤變成40高這個(gè)事件你是無法監(jiān)聽到并且做相應(yīng)處理的
個(gè)人覺得監(jiān)聽`UIKeyboardWillChangeFrameNotification`會(huì)好一些
*/
//監(jiān)聽收回鍵盤
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardDidHide:)
name:UIKeyboardDidHideNotification
object:nil];
第二步
實(shí)現(xiàn)監(jiān)聽的方法
- (void)keyboardWillChangeFrame:(NSNotification *)notification {
NSDictionary *info = [notification userInfo];
//獲取改變尺寸后的鍵盤的frame
CGRect endKeyboardRect = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
[UIView animateWithDuration:0.2 animations:^{
CGRect frame = _settingTableView.frame;
//如果是監(jiān)聽鍵盤尺寸改變 一定要用計(jì)算最終高度的方式來計(jì)算 如果用控件自加自減的方式會(huì)出錯(cuò)
frame.size.height = SCREEN_HEIGHT - 64 - endKeyboardRect.size.height;
//這里的計(jì)算思路是 屏幕高度 - (導(dǎo)航欄 + 狀態(tài)欄) - 當(dāng)前鍵盤的高度 = tableView的高度
//可以根據(jù)實(shí)際情況做處理
_settingTableView.frame = frame;
}];
}
- (void)keyboardDidHide:(NSNotification *)aNotification{
//鍵盤收起后恢復(fù)控件尺寸
[UIView animateWithDuration:0.2 animations:^{
CGRect frame = _scrollView.frame;
//同理這里也應(yīng)該是計(jì)算最終高度的方式來計(jì)算
frame.size.height = SCREEN_HEIGHT - 64;
_scrollView.frame = frame;
} completion:^(BOOL finished) {
}];
}