有没有办法在展示键盘之前以编程方式获取键盘尺寸?在Objective-C
我需要以编程方式将view.height约束设置为与keyboard.height相同。而且它需要在呈现键盘之前发生,因此在呈现ViewController之后,视图不会得到这种难看的约束动画。
答案 0 :(得分:1)
我假设您通过在某个UI组件上调用becomeFirstResponder
来显示键盘。
如果在显示视图后出现键盘,则应检查在何处执行该调用。在viewDidLoad
或类似的方式中调用它会导致视图动画进入时显示键盘。
您的布局还应该正确处理键盘更改。键盘大小即使显示后也可以更改。例如,表情符号/快速型键盘比默认键盘高。
您应该结合使用UIKeyboard[Will/Did]ShowNotification
,UIKeyboard[Will/Did]HideNotification
和UIKeyboardWillChangeFrameNotification
进行约束更改。就您而言,UIKeyboardWillShowNotification
应该可以解决问题。
userInfo
字典包含有关键盘的a lot of information。您可以在UIKeyboardFrameEndUserInfoKey
中找到键盘的最后一帧。如果要对布局中的更改进行动画处理,则可以使用UIKeyboardAnimationCurveUserInfoKey
和UIKeyboardAnimationDurationUserInfoKey
中的值来为与键盘相同的动画制作动画。
- (void)viewDidLoad {
[super viewDidLoad];
// Don't forget to remove the observer when appropriate.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
[self.textField becomeFirstResponder];
}
- (void)keyboardWillShow:(NSNotification *)notification {
CGFloat keyboardHeight = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue].size.height;
[self.viewHeightConstraint setConstant:keyboardHeight];
// You can also animate the constraint change.
}
如果从一开始就显示键盘,则这种设置也将起作用。