gpt4 book ai didi

ios - Objective-C:在打开之前*检测键盘大小/原点?

转载 作者:行者123 更新时间:2023-11-29 01:46:43 25 4
gpt4 key购买 nike

这是怎么做到的?我正在寻找 iOS7/8 解决方案。 KeyboardWillShow 并不令人满意,因为我需要在键盘实际显示之前根据键盘高度调整 View 大小。

最佳答案

keyboardWillShow 显示键盘之前触发。如果这对您来说不满意,那么您需要明智地选择键盘尺寸。

如果键盘以前从未在您的应用程序的屏幕上显示过,您可以通过首先检查 device type 来做出有根据的猜测。和 orientation然后有一个default keyboard sizes的快速查找表。这将涵盖 99% 的时间。

如果用户使用的自定义键盘不是标准尺寸,您可以使用 keyboardWillShow 中的键盘尺寸,存储它和方向(NSUserDefaults 在这里效果很好),然后在下次需要大小时引用存储的值。

这不会每次都满足您的需求,因为在调用 keyboardWillShow 之前您不知道哪个键盘将被拉起。例如,您可以将两个不同 UITextField 上的 inputView 替换为您自己的自定义 View ;这些 View 可能有不同的大小。在调用 keyboardWillShow 之前,您不会知道将显示哪一个。

编辑

还有另一种可能性...如果您知道要显式显示键盘的 View 。

我将此添加到 viewDidLoad:

[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShowFirstTimeNotification:)
name:UIKeyboardWillShowNotification
object:nil];
[self.view addSubview:self.textField];
[self.textField becomeFirstResponder];

然后,添加处理该通知的方法。此方法应该仅调用一次,然后在其内部删除通知,这样就不会再次调用它。

- (void)keyboardWillShowFirstTimeNotification:(NSNotification*)notification {
NSDictionary* keyboardInfo = [notification userInfo];
NSValue* keyboardFrameBegin = [keyboardInfo valueForKey:UIKeyboardFrameBeginUserInfoKey];
CGRect keyboardFrameBeginRect = [keyboardFrameBegin CGRectValue];

NSLog(@"keyboardFrameBeginRectHeight: %f", keyboardFrameBeginRect.size.height);

[[NSNotificationCenter defaultCenter] removeObserver:self];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow)
name:UIKeyboardWillShowNotification
object:nil];
[self.textField resignFirstResponder];
}

这将记录键盘高度,而不会将其显示在屏幕上。

如果您想进一步扩展它,您可以将 UITextFieldUITextView 子类化为不同方向的键盘高度属性,然后您可以将该值直接存储在文本字段和 TextView 。然后,您将能够拥有多个输入 View 尺寸,并在显示它们之前知道它们的尺寸。

关于ios - Objective-C:在打开之前*检测键盘大小/原点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31835564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com