首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

键盘隐藏/显示通知时UITextView的scrollView问题

键盘隐藏/显示通知时UITextView的scrollView问题是指在iOS开发中,当键盘弹出或隐藏时,UITextView中的内容可能会被键盘遮挡或者出现布局错乱的问题。

为了解决这个问题,可以通过监听键盘的显示和隐藏通知,动态调整UITextView的scrollView的contentInset属性。具体步骤如下:

  1. 注册键盘显示和隐藏的通知:
代码语言:txt
复制
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: UIResponder.keyboardWillHideNotification, object: nil)
  1. 实现键盘显示和隐藏的通知处理方法:
代码语言:txt
复制
@objc func keyboardWillShow(_ notification: Notification) {
    if let keyboardFrame = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
        let keyboardHeight = keyboardFrame.size.height
        textView.contentInset.bottom = keyboardHeight
        textView.scrollIndicatorInsets.bottom = keyboardHeight
    }
}

@objc func keyboardWillHide(_ notification: Notification) {
    textView.contentInset = .zero
    textView.scrollIndicatorInsets = .zero
}

在键盘显示通知方法中,通过获取键盘的高度,将textView的contentInset和scrollIndicatorInsets的底部设置为键盘的高度,以便让textView的内容上移,避免被键盘遮挡。在键盘隐藏通知方法中,将contentInset和scrollIndicatorInsets重置为零,恢复原始布局。

这种解决方案适用于大部分情况下,但在某些特殊情况下可能会出现问题,比如当UITextView嵌套在其他视图中时。在这种情况下,可能需要根据具体情况进行适当的调整。

推荐的腾讯云相关产品:腾讯云移动应用分析(MTA),该产品可以帮助开发者分析移动应用的用户行为和性能数据,提供数据分析和用户行为分析等功能。产品介绍链接地址:https://cloud.tencent.com/product/mta

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • iOS学习——tableview中带编辑功能的cell键盘弹出遮挡和收起问题解决

    最近在项目中经常用到UITableView中的cell中带有UITextField或UITextView的情况,然后在这种场景下,当我们点击屏幕较下方的cell进行编辑时,这时候键盘弹出来会出现遮挡待输入的...这个问题在之前我们的随笔iOS学习——键盘弹出遮挡输入框问题解决方案中也有讲过对应的解决方案,但是该方案在最近的应用中还有点小问题,我们在这里重新进行处理好。...  在文本框输入即将结束,即即将注销第一响应者时,系统会调用 textFieldShouldEndEditing: 方法 文本框注销第一响应者,对应的响应时间就是系统收回键盘,并且在隐藏键盘时会发出 UIKeyboardWillHideNotification...  在前面的2.1的UITextField或UITextView点击之后的详细流程分析中我们知道,在点击文本之后弹出键盘时会发送一个UIKeyboardWillShowNotification的通知,...在编辑结束之后收起键盘时则也会发送一个UIKeyboardWillHideNotification的通知,所以我们通过监听这两个通知,来采取对应的行动。

    3.9K80

    解决Scrollview 嵌套recyclerview不能显示,高度不正常的问题

    我们先看一个效果,问题说的就是中间的Grid效果在Scrollview 嵌套recyclerview显示问题,在Android Api 24是好的,不过在5,1,1版本(api 22)缺出现了问题 最近项目中...,有一个商品详情页面,页面有好几个网格页面,大家说,我们大可以用GridView去做,但是需要方的要求是,我们的网格的中间的线怎么做呢,对于GridView,我们知道我们可以这是一个背景,然后用verticalSpacing...来做,这也算一个方法吧,但是对于Line线的计算是一个问题,有很多的计算逻辑,这样对代码的美观就造成了破坏,且看一段之前的代码: private void computeCompanyGridViewHeight...以前在ScrollView中嵌套嵌套ListView,无法正确的计算ListView的大小,现在我们在ScrollView中嵌套嵌套RecycleView的时候,也出现了计算不出高度的问题,于是有人想到我们是不是可以自己实现一个重写一个继承自...RecycleView的类,重写OmMeasure,呵呵,但是实际上这是不行的,RecycleView是具体的一个控件,不相同与我们的ListView,这里参照之前网上的解决方案,我们可以继承自GridManager

    3.4K50

    iOS学习——键盘弹出遮挡输入框问题解决方案

    在iOS或Android等移动端开发过程中,经常遇到很多需要我们输入信息的情况,例如登录时要输入账号密码、查询时要输入查询信息、注册或申请时需要填写一些信息等都是通过我们键盘来进行输入的,在iOS开发过程中...: 文本框注销第一响应者,对应的响应时间就是系统收回键盘,并且在隐藏键盘时会发出 UIKeyboardWillHideNotification和UIKeyboardDidHideNotification...textFieldDidEndEditing: 二 键盘的弹出与收起 2.1 弹出键盘的控制   关于键盘的弹出与收起问题,从上面的响应过程分析可知,键盘的弹出对于UITextField和UITextView...  还是在之前的分析中,我们知道在键盘弹出和收起时,系统都会发出对应的通知,所以我们可以在收到键盘弹出的时候判断键盘的位置和当前输入文本框的位置,如果有遮挡,就将当前视图进行一个向上平移,在收到键盘回收的通知时就平移到原先的位置...- (self.view.frame.size.height - kbSize.height); //将试图的Y坐标向上移动offset个单位,以使界面腾出开的地方用于软键盘的显示 if

    3.7K60

    iOS开发过程中的奇淫技巧记录

    为了修改带分组tableview的section header跟随置顶的问题,网上的奇淫技巧比方通过修改scroller的回调方法,体验不好,正规的方法是修改为tableView的UITableViewStyleGrouped...imageView.layer.cornerRadius = imageView.frame.size.width/2; imageView.layer.masksToBounds = YES; 界面进入后隐藏输入框默认焦点的键盘...UITextView出不来键盘: @implementation UITextView (DisableCopyPaste) - (BOOL)canBecomeFirstResponder {     ...header后不再滑动: //禁止滑动出界 self.tableView.bounces = NO;      - (void)scrollViewDidScroll:(UIScrollView *)scrollView...if (scrollY >= topHeaderY){         //禁止scroll         //self.tableView.scrollEnabled = NO;         scrollView.contentOffset

    60620

    【iOS 开发】基本 UI 控件详解 (UIButton | UITextField | UITextView | UISwitch)

    ; (2) UITextView 属性类别 UITextView 属性类别 :  -- TextView 属性 : UITextView 父类的属性; -- ScrollView 属性 : UIScrollView...Indicator : 水平滚动 Scroll View 时, 显示水平滚动条; -- Shows Vertical Indicator : 垂直滚动 ScrollView 时, 显示垂直滚动条; (...UITextView 控件指定范围的文本内容将要被替换时激发的方法; -- "- textViewDidChange : " 方法 : 文本内容发生改变时, 激发该方法; -- "- textViewDidChangeSelection...UITextView 虚拟键盘关闭 (1) 需求分析 UITextView 与 UITextField 中使用的虚拟键盘对比 :  -- UITextField 虚拟键盘 : 右下角的键是 Done,...按下这个键可以设置成关闭虚拟键盘; -- UITextView 虚拟键盘 : 由于 UITextView 是多行文本, 右下角的键是 return, 这个键是 回车键, 如果我们想要将虚拟键盘退出需要有其他方法

    6.9K20

    设计iOS中随系统键盘弹收和内容文字长度自适应高度的文本框

    设计iOS中随系统键盘弹收和内容文字长度自适应高度的文本框     文本输入框是多数与社交相关的app中不可或缺的一个控件,这些文本输入框应该具备如下的功能: 1.在键盘为弹起时,输入框悬浮在界面底部...2.当键盘弹起时,输入框位置上移至键盘上方,并且动画应与键盘同步。 3.当输入的文字超出一行时,输入框应想用的进行高度扩展。...:  //键盘将要展示时触发的方法     func keyboardWillShow(noti:NSNotification){         //获取通知信息         let info:Dictionary...UIView.animateWithDuration(time) { () -> Void in             self.view.layoutIfNeeded()         }     }     //键盘将要隐藏时触发的方法...: String//键盘frame已经改变 还需要实现当输入框文字长度改变时的回调方法如下: func textViewDidChange(textView: UITextView) {

    1.5K20

    IOS系统input输入框为readonly时, 隐藏键盘上的上下箭头

    业务中在一定场景中会将input 设置为只读状态,在IOS safari上当input 输入框focus 时,仍会出现键盘上的上下箭头,这种用户体验非常不好,如何干掉呢?... 说一下思路: 上下箭头是无法通过 设置html属性,meta标签或者监听事件来解决,因为这些箭头并没有可以监听它的事件。...而这些箭头的本意是让用户在上下多个input 中自由方便切换。 但是对于输入框的状态是只读时,给用户弹出这样的箭头就不应该了。...唯一的选择是当输入被聚焦时禁用表单中的所有其他输入,因此就不会出现上下切换的选项卡。...具体实施方法是 focus某个input时,对于所选input之外的所有input与textarea元素,添加readobly参数。

    2.1K30

    iOS自定义的emoji表情键盘 原

    iOS自定义的表情键盘 一、关于emoji表情         随着iOS系统版本的升级,对原生emoji表情的支持也越来越丰富。...在iOS端,可以有另一种方式,通过上面我们知道,通过SBUnicode码我们可以在客户端显示表情符号,并且这个码的排列是十分有规律的,通过这个特点,我们可以通过遍历SBUnicode码的范围进行表情的创建...0:1);     pageControlBottom.currentPage = page; } 三、切换系统键盘和自定义的表情键盘         UITextField和UITextView都会有下面这个属性和方法...,如果我们不设置或者设置为nil,则会弹出系统键盘,reloadInputView方法可以使我们刷新这个附件视图,通过这两个,我们可以非常轻松的实现键盘的切换,比如我们在一个出发方法中如下处理: -(void...追注:测试上面的SBUnicode码在模拟器上可以正常显示,真机并不能识别,可以通过将表情符全部添加到一个plist文件中,通过文件读取来创建键盘的方式进行真机上的开发。

    3K10

    小问题记录

    = NSOrderedDescending) if (SYSTEM_VERSION_LESS_THAN(@"8.0")) { ... } 文件保存数据库的问题 iOS 往数据库里写保存文件路径的时候...,不要写全路径,因为软件更新或者重新安装沙盒路径会变 更新的流程是这样的:更新时,先在新的路径里安装新程序,然后把旧程序文件夹里的配置文件之类的文件拷贝到新的路径里去,然后删除旧程序 所以,如果数据库里保存的是绝对路径...、调用这个方法的view2、view2的所有子view都会调用layoutSubviews setFrame:只有在view设置frame且尺寸参数有不同的情况下调用 滑动UIScrollView时,scrollView...这个属性的,但是UITextView没有,大家表示也是醉了。...@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; 多个UITextField,键盘

    3.4K21

    iOS导航栏使用总结

    目录: 一、设置导航栏样式 二、解决自定义导航栏返回按钮后侧滑不可用问题 三、隐藏导航栏底部的分割线 四、导航栏引起的布局问题 相关文章:iOS状态栏的使用总结 一、设置导航栏样式 设置导航栏的样式可分为全局设置与局部设置...self.navigationController.navigationBar]; self.navBarBottomImage = navBarBottomImage; } //第四步:设置分割线的显示或隐藏...= YES; } //离开页面时显示分割线 -(void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated...我们可以通过一段代码来测试一下效果,在默认导航栏(半透明)的视图控制器里添加如下代码: //UITextView是滑动视图,内容自动向下偏移,不会被导航栏覆盖 UITextView *leftTextView...,默认值是UIRectEdgeAll,即:当前视图控制器里各种UI控件会忽略导航栏和标签的存在,布局时若设置其原点设置为(0,0),视图会延伸显示到导航栏的下面被覆盖。

    3.2K20

    UITableViewCell系列之(一)让你的cell支持二次编辑

    每个开发者采用的方式不同,有的开发者直接以modal/push的方式present出一个控制器,把tableViewCell上的内容传递到被modal/push的控制器的UITextView上,在UITextView...上进行二次编辑,编辑完成再把数据逆传回来,重新显示到tableView上。...另外一种方法是直接在当前控制器(的界面)上以动画(甚至是没有动画)的形式弹出一个UITextView,在UITextView上修改文本内容,修改完成后再隐藏/移除UITextView,把内容重新显示到tableView...做的好的同学,可能还不忘弹出UITextView的时给tableView添加一个蒙版或者模糊效果以突出重点,提高用户的体验度。以上的两种方式算是中规中矩。...此处称为frame1 根据frame1获取点击的那一行cell 在cell上添加一个和label同样尺寸、同样坐标的UITextView,以让UITextView正好遮盖住label 把cell上的内容显示到

    7.8K40
    领券