iPhone键盘尺寸

时间:2019-01-11 21:52:12

标签: ios objective-c user-interface keyboard

有没有办法在展示键盘之前以编程方式获取键盘尺寸?在Objective-C

我需要以编程方式将view.height约束设置为与keyboard.height相同。而且它需要在呈现键盘之前发生,因此在呈现ViewController之后,视图不会得到这种难看的约束动画。

enter image description here

1 个答案:

答案 0 :(得分:1)

我假设您通过在某个UI组件上调用becomeFirstResponder来显示键盘。

如果在显示视图后出现键盘,则应检查在何处执行该调用。在viewDidLoad或类似的方式中调用它会导致视图动画进入时显示键盘。


您的布局还应该正确处理键盘更改。键盘大小即使显示后也可以更改。例如,表情符号/快速型键盘比默认键盘高。

您应该结合使用UIKeyboard[Will/Did]ShowNotificationUIKeyboard[Will/Did]HideNotificationUIKeyboardWillChangeFrameNotification进行约束更改。就您而言,UIKeyboardWillShowNotification应该可以解决问题。

userInfo字典包含有关键盘的a lot of information。您可以在UIKeyboardFrameEndUserInfoKey中找到键盘的最后一帧。如果要对布局中的更改进行动画处理,则可以使用UIKeyboardAnimationCurveUserInfoKeyUIKeyboardAnimationDurationUserInfoKey中的值来为与键盘相同的动画制作动画。

- (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.
}

如果从一开始就显示键盘,则这种设置也将起作用。