iOS iPhone - 在keyboardWillShow之前获取UIKeyboard高度

Posted

技术标签:

【中文标题】iOS iPhone - 在keyboardWillShow之前获取UIKeyboard高度【英文标题】:iOS iPhone - get UIKeyboard height BEFORE keyboardWillShow 【发布时间】:2015-03-24 04:41:49 【问题描述】:

我知道我可以从keyboardWillShow 上的UIKeyboardFrameEndUserInfoKey 获取UIKeyboard 高度,并且当它成为第一响应者时触发keyboardDidShow 通知。

但是,我想知道在这些事件之前键盘的预期高度,以便我可以在视图控制器的 viewDidLoad 处设置某些设计元素。

由于设备正在发生变化并且新的拼写校正栏会改变键盘高度,我不想硬编码高度。

有谁知道如何从键盘获得预期的高度,同时考虑到它是否具有自动更正等功能?

【问题讨论】:

你到底需要它做什么?要具体,因为您几乎肯定想采用不同的方法。 请注意我的问题部分,即“我想知道这些事件之前键盘的预期高度,以便我可以在视图控制器的 viewDidLoad 处设置某些设计元素”。对此进行扩展:我的元素是根据键盘的高度进行布局的,但不是为了响应键盘的升高。 你不能事先知道。屏幕上每个文本字段或文本视图的键盘高度可能不同。一个可能有inputAccessoryView,另一个可能没有。 基本上,如果我在 IB 中设置文本字段/视图或以编程方式设置类似 textField.inputView.frame.size.height 的内容会很好。与此同时,我已经解决了一些变通办法,但它们最终导致我的设计看起来不像我想要的那样,因为在 ios8 之前不存在快速输入栏,谁知道未来会发生什么变化。我可以做出响应调整正在确定设备和操作系统,但它很烦人,并且再次受到 Apple 未来更改的影响 【参考方案1】:

您可以通过以下方式进行:

- (void)viewDidLoad 
[super viewDidLoad];
[self initializeTextView];

-(void)initializeTextView

// Listen for keyboard appearances and disappearances
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardDidShow:)
                                             name:UIKeyboardDidShowNotification
                                           object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardDidHide:)
                                             name:UIKeyboardDidHideNotification
                                           object:nil];

myColoredTextview  = [[UITextView alloc]initWithFrame:CGRectMake(0, 20, 300, 100)];
myColoredTextview.delegate = self;
[self.view addSubview:myColoredTextview];
myColoredTextview.backgroundColor = [UIColor lightGrayColor];


- (void)keyboardDidShow: (NSNotification *) notif
// Do something here
 NSLog(@"show:%@",notif);
 NSDictionary *userInfo = [notif valueForKey:@"userInfo"];
 CGRect kbFrame = [[userInfo objectForKey:@"UIKeyboardFrameBeginUserInfoKey"] CGRectValue];
 NSLog(@"keboardHeight:%f",kbFrame.size.height);

- (void)keyboardDidHide: (NSNotification *) notif
// Do something here
NSLog(@"hide:%@",notif);

【讨论】:

以上是关于iOS iPhone - 在keyboardWillShow之前获取UIKeyboard高度的主要内容,如果未能解决你的问题,请参考以下文章

IOS应用在ios7(iPhone5/iPhone5s)上不能全屏显示

iOS14最新升级率公布 iPhone将迎来重要更新

iOS14最新升级率公布 iPhone将迎来重要更新

在iPhone 4或iOS 5中可以直接使用Wifi吗?

iOS:在 iPhone 8 和 iPhone 8 plus 屏幕上设置视图

iPhone - 注册推送通知锁定 iPhone 在发布模式下运行 iOS3