UIScrollView中的编辑框(UITextView/UITextField) 被弹出键盘遮挡的问题

一般原生表单操作中都是UIScrollView上添加UITextView或UITextField完成的,添加UITextView可以方便的换行,如果是UITextField就不会换行了。

不管是UITextView 还是 UITextField,都有一个问题,就是如果输入框偏下,那么弹起键盘的时候,如何让UIScrollView自动向上滚动,使输入框不被遮挡;
当然方法应该有很多,可以设置UIScrollView的contentOffset,或者修改frame等,然后等键盘消失的时候再修改回去。

有没有简单的方法呢?

1 如果输入框是UITextField:

  • 添加键盘弹起和收起的监听

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

keyboardWillShow和keyboardWillHide的实现如下:


- (void)keyboardWillShow:(NSNotification *)notify

{

  //获取键盘弹出后的高度

CGRect keyBoardRect = [notify.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];

CGFloat deltaY = keyBoardRect.size.height;

//设置新的内边距,这个内边距是UIScrollView的最后一行距离UIScrollView底边框的距离,

 //系统会将当前选中行距离窗口底边的距离设为该值,从而正好不被键盘遮盖住。

UIEdgeInsets e = UIEdgeInsetsMake(0, 0, keyboardBounds.size.height, 0);

[self.scrollView setContentInset:e];

  //调整滑动条距离窗口底边的距离

[self.scrollView setScrollIndicatorInsets:e];

}

(void)keyboardWillHide:(NSNotification *)notify

{

 //键盘缩回后,恢复正常设置

UIEdgeInsets e = UIEdgeInsetsMake(0, 0, 0, 0);

[self.scrollView setScrollIndicatorInsets:e];

[self.scrollView setContentInset:e];

}

最终效果如下:

20220602-223118.gif

20220602-223118.mp4

2 如果输入框是UITextView:

监听键盘的代码和上面一样,如果把UITextField换为UITextView,发现不生效了,找了很久也没发现问题;
后来发现 UITextField 继承自 UIControl,而UITextView继承自UIScrollView,莫非是UIScrollView嵌套UIScrollView就会有问题;
后来发现只要把 UITextView的scrollEnabled 设置为NO即可。

input.scrollEnabled = NO;

其他方法参考:

  1. iOS开发之UIScrollView与TextView嵌套: https://www.jianshu.com/p/d1a9d8aae84b
  2. https://blog.csdn.net/xcysuccess3/article/details/40590463?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_title~default-1-40590463-blog-52181142.pc_relevant_paycolumn_v3&spm=1001.2101.3001.4242.2&utm_relevant_index=4
  3. UITableView中的键盘遮盖问题 :https://blog.csdn.net/zhoushuangjian511/article/details/53129068?spm=1001.2101.3001.6650.11&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-11-53129068-blog-52181142.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-11-53129068-blog-52181142.pc_relevant_paycolumn_v3&utm_relevant_index=17

4 [操作系统]处理UIScrollView中的编辑框被弹出键盘遮挡的问题 : https://blog.csdn.net/wangzhen3416/article/details/52181142

你可能感兴趣的:(UIScrollView中的编辑框(UITextView/UITextField) 被弹出键盘遮挡的问题)