键盘弹起收起时不遮挡处理

view初始化时增加通知:

{code}

   //增加监听,当键盘出现或改变时收出消息

[[NSNotificationCenter defaultCenter] addObserver:self

selector:@selector(keyboardWillShow:)

name:UIKeyboardWillShowNotification

object:nil];

//增加监听,当键退出时收出消息

[[NSNotificationCenter defaultCenter] addObserver:self

selector:@selector(keyboardWillHide:)

name:UIKeyboardWillHideNotification

object:nil];

{code}

键盘弹起和收起时触发的动作

{code}

- (void)keyboardWillShow:(NSNotification *)notification {

if (!_highlightedTextField) {// 当前焦点TextField

return;

}

UIView *view = [self superview];

while (![view isKindOfClass:[UIScrollView class]] &&

[view superview]) {

view = [view superview];

}

if (![view isKindOfClass:[UIScrollView class]]) {

return;

}

UIScrollView *scrollView = (UIScrollView *)view;

CGSize kbSize = [[notification.userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

CGFloat keyboardHeight = kbSize.height;

UITextField *textField = _highlightedTextField;

if ([UIApplication sharedApplication].windows.count == 0) {

return;

}

UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardHeight, 0.0);

scrollView.contentInset = contentInsets;

scrollView.scrollIndicatorInsets = contentInsets;

UIWindow *window = [UIApplication sharedApplication].windows[0];

CGRect textRect = [scrollView convertRect:textField.bounds fromView:textField];

CGRect scrollRect = [window convertRect:scrollView.bounds fromView:scrollView];

CGFloat scrollBottomMargin = window.height - scrollRect.origin.y - scrollRect.size.height;

CGFloat offset = textRect.origin.y + textRect.size.height - scrollView.contentOffset.y - scrollBottomMargin - (scrollView.height - keyboardHeight);

if (offset > 0) {

CGPoint scrollPoint = CGPointMake(0.0, scrollView.contentOffset.y + offset);

[scrollView setContentOffset:scrollPoint animated:YES];

}

}

- (void)keyboardWillHide:(NSNotification *)notification{

UIView *view = [self superview];

while (![view isKindOfClass:[UIScrollView class]] &&

[view superview]) {

view = [view superview];

}

if (![view isKindOfClass:[UIScrollView class]]) {

return;

}

UIScrollView *scrollView = (UIScrollView *)view;

UIEdgeInsets contentInsets = UIEdgeInsetsZero;

scrollView.contentInset = contentInsets;

scrollView.scrollIndicatorInsets = contentInsets;

}

{code}

时间: 2024-08-27 09:05:04

键盘弹起收起时不遮挡处理的相关文章

ios 最新系统bug与解决——微信公众号中弹出键盘再收起时,原虚拟键盘位点击事件无效

最近ios发布新版本系统12.1,随着部分用户的系统更新,一些问题也渐渐暴露出来... 公司用户反映微信公众号出现了点击无效的bug!!测试调查发现,只有iphonex.iphone6,ihpone7等部分机型会出现该问题 我当时就是一惊,一般出现在事件上的问题都是疑难杂症.何况是跟键盘相关的. 我们都知道在H5端是没法监控键盘的弹出与收起的,resize事件触发的机型极其有限,何况我在ios中实测没有触发,安卓反而可以.因为安卓弹起键盘时会修改视窗的大小,但是ios并不会,如果你在ios上设置

iOS Dev (54) 键盘弹出后收起时View随之移动

iOS Dev (54) 键盘弹出后收起时View随之移动 作者:大锐哥 博客:http://prevention.iteye.com - 添加监听 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeContentViewPosition:) name:UIKeyboardWillShowNotification object:nil]; [[NSNotificationCenter d

软键盘弹起,导致底部被顶上去

计算出可视界面的高度,当软键盘弹起时让底部元素隐藏掉, 当键盘收起时再让它显示,实在没办法时这种方法也不失为一种方法 var h=document.documentElement.clientHeight; $(window).resize(function(){ let height=document.documentElement.clientHeight; if(h==height){ $('.bottom').css('display','block'); }else{ $('.bott

移动端输入框获取焦点后,虚拟键盘弹起,把固定的底部也顶起来了

var homeFootBar = document.querySelector("底部foot")var shortcutVal = document.querySelector("input")shortcutVal.addEventListener("focus", function (e) { if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){ focusInput()

Android之监听手机软键盘弹起与关闭

背景: 在很多App开发过程中需要在Activity中监听Android设备的软键盘弹起与关闭,但是Android似乎没有提供相关的的监听API给我们来调用,本文提供了一个可行的办法来监听软键盘的弹起与关闭. 预备知识: 在manifest文件中可以设置Activity的android:windowSoftInputMode属性,这个属性值常见的设置如下: android:windowSoftInputMode="stateAlwaysHidden|adjustPan" 那么这里值的含

全局异步和主线程异步区别、改变PlaceHolder颜色、解决键盘弹起挡住文本框问题

1.全局异步执行耗时任务 dispatch_async(dispatch_get_global_queue(0, 0), ^{ }); 2.主线程异步刷新UI dispatch_async(dispatch_get_main_queue(), ^{ }); 3.改变PlaceHolder的颜色 [username_text setValue:[UIColor colorWithRed:1 green:1 blue:1 alpha:0.5] forKeyPath:@"_placeholderLab

<Android>监听软键盘打开收起事件(软键盘自带收起按钮)

最近在公司开发cocos2dx上的android输入框控件,遇到软键盘的事件监听,通常软键盘的收起方式大致3种: 1.点击软键盘右下角的Return按钮(系统收起) 2.输入框焦点时按返回按钮(系统收起) 3.点击软键盘和输入框的外部(自发收起) 4.点击软键盘自带的收起按钮(软键盘收起) 前三种事件可以监听,方式都比较简单 1.点击软键盘右下角的Return按钮 给输入框设置监听 editText.setOnEditorActionListener(new OnEditorActionList

Android软键盘弹出时布局问题

最近项目需要做一个类似聊天室的模块,基于Socket实现的,这部分稍后一段时间再做总结,功能上的相关点都实现了小例子也做出来了,最后发现一个比较腻歪的问题就是软键盘弹出时总是会把标题“挤出”屏幕,(无论标题是写在布局中还是仿照theme的方式添加到style中),输入时有失观赏如下图:      隐隐感觉之前项目一直有类似问题,只不过一般只在登陆界面,无伤大雅,用户输入后一掠而过,可以忽略,但这个页面这么处理确实不太美观. 查了下此类问题大致两种思路解决:         一.调整布局在底层使用

关于UIAlertView键盘弹起的问题

这里记录一下我在开发中遇到的一个奇葩的问题,经过百度后我发现这个问题确实存在,也有不少人遇到过,今天就把它写出来.其实我们单纯的使用UIAlertView是没什么问题的,但是当UI中有输入框时,当输入完成后,我们点击按钮弹出UIAlertView的时候,在点击UIAlertView上面的按钮跳转到下一个页面的时候,那么问题就来了,在后一个页面会弹出键盘.这个问题刚开始出现的时候,莫名奇妙,也找了好久,因为在模拟器上是不容易察觉的,在真机上就非常明显了. 下面我们模拟一下这个现象,在此来给大家加深