布局圖片:
// ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@end
// ViewController.m
#import "ViewController.h"
@interface ViewController ()
/** 文本框底部約束*/
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *bottomSpace;
/** 文本框*/
@property (weak, nonatomic) IBOutlet UITextField *textField;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChange:) name:UIKeyboardWillChangeFrameNotification object:nil];
}
/**
* 監(jiān)聽鍵盤的frame即將發(fā)生改變的時候調(diào)用
*/
- (void)keyboardWillChange:(NSNotification *)note
{
// 獲得鍵盤的frame
CGRect frame = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
// 修改底部約束
self.bottomSpace.constant = self.view.frame.size.height - frame.origin.y;
// 執(zhí)行動畫
CGFloat duration = [note.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
// 約束動畫击纬,利用duration時間去更新約束
[UIView animateWithDuration:duration animations:^{
// 強制布局
[self.view layoutIfNeeded];
}];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.view endEditing:YES];
}
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
@end
程序一啟動效果圖片:
點擊文本框效果圖片:
點擊空白區(qū)域效果圖片: