iOS 获取软键盘高度

- (void)viewDidLoad{

       [[NSNotificationCenterdefaultCenteraddObserver:self selector:@selector(keyboardDidShow:)

               name:UIKeyboardDidShowNotification object:nil];  

       [[NSNotificationCenterdefaultCenter] addObserver:self selector:@selector(keyboardDidHide:)

               name:UIKeyboardDidHideNotification   object:nil];

}


- (void)keyboardDidShow:(NSNotification *)nsNotification {

         NSDictionary *userInfo = [nsNotificationuserInfo]; 

         _keyboardSize = [[userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

        [selfupdateTextViewSize];

}


- (void)keyboardDidHide:(NSNotification *)nsNotification {

          _keyboardSize =CGSizeMake(0.0,0.0);

         [selfupdateTextViewSize];

}


- (void)updateTextViewSize {

         UIInterfaceOrientation orientation =

         [UIApplication sharedApplication].statusBarOrientation;

         CGFloat keyboardHeight =  UIInterfaceOrientationIsLandscape(orientation) ?  _keyboardSize.width          

                                                               :_keyboardSize.height;

          _textView.frame =CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height - keyboardHeight);

}




### iOS HTML5 软键盘高度获取方法 在iOS平台下,通过HTML5实现软键盘弹出时的高度获取是一个常见的需求。以下是基于提供的代码片段以及相关技术背景整理的方法。 #### 方法一:利用 `visualViewport` 和窗口尺寸差计算 此方法适用于现代浏览器环境下的iOS设备。核心逻辑在于检测到软键盘弹出后,页面可视区域高度会减少,从而可以通过对比原始视口高度与当前视口高度来推算出软键盘的实际高度。 ```javascript const updateKeyboardHeight = () => { const isIOS = /iPhone|iPad|iPod|iOS/.test(navigator.userAgent); if (!isIOS) return; let originalHeight = window.innerHeight; let currentHeight = 0; function calculateKeyboardHeight() { currentHeight = Math.min( visualViewport?.height || 0, document.documentElement.clientHeight ); const keyboardHeight = originalHeight - currentHeight; console.log('Soft Keyboard Height:', keyboardHeight + 'px'); } window.addEventListener('resize', () => { calculateKeyboardHeight(); }); // 初始调用一次以设置初始值 calculateKeyboardHeight(); }; updateKeyboardHeight(); ``` 上述代码实现了动态监听窗口大小变化的功能,并据此推测软键盘高度[^1]。 --- #### 方法二:通过 `onresize` 事件监测窗口高度的变化 对于某些特定场景(尤其是兼容性较差的情况),可以采用传统的 `onresize` 事件处理方式。该方案主要依赖于记录原始窗口高度并与调整后的窗口高度作比较得出结论。 ```javascript let originalHeight = document.documentElement.clientHeight || document.body.clientHeight; window.onresize = function () { let resizeHeight = document.documentElement.clientHeight || document.body.clientHeight; if (resizeHeight < originalHeight) { // 键盘弹起状态 const keyboardHeight = originalHeight - resizeHeight; console.log('Keyboard height detected as:', keyboardHeight + 'px'); } else { // 键盘关闭状态 console.log('Keyboard closed.'); } }; ``` 这种方法简单直观,但在部分情况下可能无法精确捕捉到所有的细节行为[^2]。 --- #### 注意事项 - **延迟问题**:由于iOS系统的特殊机制,有时需要引入短时间延时才能准确捕获最终的视觉端口数据。 - **边界条件**:考虑到不同机型屏幕比例差异较大,建议加入额外校验逻辑防止误判。 - **跨版本适配**:随着WebKit更新迭代频繁,务必测试目标用户的主流操作系统版本范围内的表现一致性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值