UIScrollview 键盘遮挡问题

#pragma mark - UIKeyboard Obscure Problem

- (void)handleKeyboardStuff {

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapScrollView:)];

    [_scrollView addGestureRecognizer:tap];
}

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

    [self adjustInsetForKeyboardShow:YES notification:notification];
}

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

    [self adjustInsetForKeyboardShow:NO notification:notification];
}

- (void) tapScrollView:(id)sender {

    [_scrollView endEditing:YES];
}

- (void)adjustInsetForKeyboardShow:(BOOL)show notification:(NSNotification *)notification {

    NSDictionary *userInfo = notification.userInfo;
    CGRect keyboardFrame = ((NSValue *)userInfo[UIKeyboardFrameBeginUserInfoKey]).CGRectValue;
    CGFloat adjustmentHeight = (CGRectGetHeight(keyboardFrame) + 20.0) * (show ? 1 : -1);

    UIEdgeInsets scrollInsets = _scrollView.contentInset;
    scrollInsets.bottom += adjustmentHeight;
    _scrollView.contentInset = scrollInsets;

    UIEdgeInsets indicatorInsets = _scrollView.scrollIndicatorInsets;
    indicatorInsets.bottom += adjustmentHeight;
    _scrollView.scrollIndicatorInsets = indicatorInsets;

}

- (void)dealloc {

    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

添加以上代码,最后在viewDidLoad方法里添加:

[self handleKeyboardStuff];
时间: 2024-10-19 16:09:06

UIScrollview 键盘遮挡问题的相关文章

IOS开发中滑动视图(UIScrollView, UITableView)的键盘遮挡处理

一.键盘遮挡的场景分类 1. 开始页面录入.输入控件在屏幕的下部,键盘出现后遮挡输入控件 2. 切换焦点.新输入框被当前键盘部分遮挡,可点击 3. 切换输入法. 4. 屏幕旋转.屏幕高度发生变化,原未被遮挡输入框旋转后被遮挡 二.UI需上移的距离计算 计算控件底部与键盘终点顶部的距离,调整阀值自定.通常选择输入控件最近的UIViewController->view作为同一参照 NSDictionary *userInfo = [notification userInfo]; NSValue* a

h5开发安卓软键盘遮挡解决方案

//处理input focus时被键盘遮挡问题 inputFocus:function(){ if(/Android [4-6]/.test(navigator.appVersion)) { window.addEventListener("resize", function() { if(document.activeElement.tagName=="INPUT" || document.activeElement.tagName=="TEXTAREA

iOS开发 编辑框被系统弹出的软键盘遮挡问题

我们在开发注冊界面的时候,最后几个注冊条件经常easy被系统弹出的键盘遮挡,例如以下图: 能够看见,邮箱条件被遮挡掉了,怎么解决呢?我是通过UITextField的代理加计算偏移量: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. self.emailTextField.delegate = self; } - (

《React-Native系列》基于多个TextInput的键盘遮挡处理方案优化

以前写过两篇关于在ReactNative上处理键盘遮挡输入表单TextInput的情况,建议读者可以先看看 1.<React-Native系列>33. 键盘遮挡问题处理 2.<React-Native系列>42.键盘遮挡问题官方处理方法KeyboardAvoidingView 以前给出的解决方案,是使用ScrollView的scrollTo方法,将表单的输入域移动到可见区域(从键盘遮挡处移到键盘上方). 这个方案存在以下问题: 1.移动距离的计算不精确 2.如果表单中有多个Text

关于键盘遮挡问题

第三方真是个好东西,搜索IQKeyboardManager,这个第三方可以帮我们完美的解决键盘遮挡的问题,使用的方法也非常简单,可以使用cocoapods直接搜索IQKeyboardManager,会出现两个,一个是OC的,另一个是swift的,大家看着选,别弄错了,我们也可以从GotHub上下载下来,连接是https://github.com/hackiftekhar/IQKeyboardManager,然后把IQKeyboardManager文件夹拖入工程,下面我们就开始正式的使用: 第一步

IOS控件UITextView 实现placeholder效果和解决UITableView键盘遮挡

平时开发中老是出现多行的文本而且要有placeholder提示,就自己整理项目中部分代码以供参考.讨论,希望有更好实现方法的人多多指教. 思路:通过改变UITextView的文本颜色实现placeholder效果,通过改变UITableView的setContentOffset方法解决键盘遮挡 1.创建UITextView textView = [[UITextViewalloc] init]; textView.font = [UIFontsystemFontOfSize:14]; textV

iOS- UITextView与键盘回收与键盘遮挡输入框

一.UITextView 可以实现多行输入的文本框,基本属性与UITextField相似,可以输入多行,可以滚动.UITextView还有个代理方式- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 可以控制输入文字的数量,较为常用 #pragma mark UITextView的代理方法 //是否可以开始编辑 - (BOOL

『零行代码』解决键盘遮挡问题(iOS)

关注仓库,及时获得更新:iOS-Source-Code-Analyze https://github.com/draveness/iOS-Source-Code-Analyze Follow: Draveness · Github 这篇文章会对 IQKeyboardManager 自动解决键盘遮挡问题的方法进行分析. 最近在项目中使用了 IQKeyboardManager 来解决 UITextField 被键盘遮挡的问题,这个框架的使用方法可以说精简到了极致,只需要将 IQKeyboardMan

React-native键盘遮挡输入框问题的解决

RN中要解决键盘遮挡输入框的问题其实有挺多方式,在这里只是记录其中的一些个人实际开发中使用到的. 方式一.使用scrollTo方法,这也是最简单最粗暴的,只是需要计算scrollview滚动的距离,并且处理一些体验的bug问题.大致思路是:组件render方法中使用scrollview,并且设置scrollview的keyboardShouldPersistTaps={true}(此步一定不能少,如果缺少该属性,接下来的一步将会不起作用),然后在scrollview中用一个view作为conta