iOS6から利用できるAuto Layoutを利用して、キーボードが表示・非表示になった時にUITextViewをリサイズしてみます。
Constraintの設定
UITextViewのConstraintsのBottom Space to: SuperviewをView Controllerのoutletに設定します。
CTViewController.h
@interface CTViewController : UIViewController
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *bottomConstraint;
@end
キーボード開閉を監視して再レイアウト
キーボードの開閉を監視して、constraintに値を設定して再レイアウトを行います。bottomConstraintにはキーボードの高さのマイナス値を設定します。
CTViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
}
- (void)keyboardWillShow:(NSNotification *)notification {
NSDictionary *info = [notification userInfo];
CGRect keyboardFrame = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
NSTimeInterval duration = [[info objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
self.bottomConstraint.constant = keyboardFrame.size.height;
[UIView animateWithDuration:duration animations:^{
[self.view layoutIfNeeded];
}];
}
- (void)keyboardWillHide:(NSNotification *)notification {
NSDictionary *info = [notification userInfo];
NSTimeInterval duration = [[info objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
self.bottomConstraint.constant = 0;
[UIView animateWithDuration:duration animations:^{
[self.view layoutIfNeeded];
}];
}
これでUITextViewをタッチすると自動的にUITextViewが縮小されてキーボードの高さにフィットするようになりました。