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

键盘出现时调整UITextView大小

是一种常见的前端开发技巧,旨在提升用户体验。当用户在使用应用程序的时候,如果需要输入大段文字,通常会出现键盘遮挡输入框的情况。为了解决这个问题,开发人员可以通过调整UITextView的大小,使其在键盘出现时能够完整显示。

以下是实现这个功能的一种常见做法:

  1. 监听键盘的出现和隐藏事件:在视图控制器中注册键盘出现和隐藏的通知,可以使用NSNotificationCenter的addObserver方法监听键盘将要出现和将要隐藏的通知。
  2. 获取键盘的高度:当键盘将要出现时,可以通过监听键盘通知的回调函数获取键盘的高度。
  3. 调整UITextView的大小:根据键盘的高度,可以通过修改UITextView的frame属性或者调整其约束来改变其大小。通常情况下,可以将UITextView的底部位置设置为键盘顶部位置减去一定的间距,使得UITextView的底部能够与键盘顶部对齐。

下面是一个示例代码片段,用于展示如何在键盘出现时调整UITextView的大小:

代码语言: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)

// 键盘将要出现时的回调函数
@objc func keyboardWillShow(_ notification: Notification) {
    if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
        // 调整UITextView的大小
        let newTextViewHeight = self.view.frame.height - keyboardSize.height - 20 // 假设键盘底部距离屏幕底部的间距为20
        self.textView.frame.size.height = newTextViewHeight
    }
}

// 键盘将要隐藏时的回调函数
@objc func keyboardWillHide(_ notification: Notification) {
    // 恢复UITextView的原始大小
    self.textView.frame.size.height = originalTextViewHeight
}

上述示例中,我们通过监听键盘的出现和隐藏事件,获取键盘的高度,并根据键盘的高度调整UITextView的大小。这样,当键盘出现时,UITextView的底部会与键盘顶部对齐,从而确保用户能够看到完整的输入框。

在实际的开发中,开发人员可以根据需求进行适当的调整和优化,比如添加动画效果、处理键盘隐藏时的逻辑等。

推荐的腾讯云相关产品和产品介绍链接地址:

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

相关·内容

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

最近在项目中经常用到UITableView中的cell中带有UITextField或UITextView的情况,然后在这种场景下,当我们点击屏幕较下方的cell进行编辑,这时候键盘弹出来会出现遮挡待输入的...,我们需要编辑的区域正好可以在键盘的上方,这样我们正好也可以看到我们编辑的内容,方便我们进行修改和调整具体内容。   ...resignFirstResponder]; 98 return YES; 99 } 100 101 @end 2.3 对自定义cell的应用   我们在对tableview的上移进行调整...  在前面的2.1的UITextField或UITextView点击之后的详细流程分析中我们知道,在点击文本之后弹出键盘时会发送一个UIKeyboardWillShowNotification的通知,...,和弹出键盘相对,弹出键盘我们保存了弹出键盘之前tableview的contentOffset的偏移量,所以,在收起键盘后,我们将tableview的contentOffset值设为弹出之前的值就可以了

3.9K80

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

设置下面的属性; -- Placeholder 属性 : 设置 "请输入密码" 提示字符串; -- Clear Button 属性 : 设置 "Appear while editing" 选项, 当编辑出现取消按钮...UITextView 控件指定范围的文本内容将要被替换激发的方法; -- "- textViewDidChange : " 方法 : 文本内容发生改变, 激发该方法; -- "- textViewDidChangeSelection...: " 方法 : 选中 UITextView 控件内文本激发该方法; 4....UITextView 虚拟键盘关闭 (1) 需求分析 UITextView 与 UITextField 中使用的虚拟键盘对比 :  -- UITextField 虚拟键盘 : 右下角的键是 Done,...按下这个键可以设置成关闭虚拟键盘; -- UITextView 虚拟键盘 : 由于 UITextView 是多行文本, 右下角的键是 return, 这个键是 回车键, 如果我们想要将虚拟键盘退出需要有其他方法

6.8K20
  • iOS 键盘和UIMenuController的并存问题

    问题描述 当UITextView 处于编辑状态,即键盘存在UITextView是第一响应者,而当需要弹出UIMenuController,第一响应者需要变更为处理UIMenuController...菜单事件的对象,此时UITextView就不是第一响应者,键盘就会隐藏,造成键盘和UIMenuController不能同时出现。...键盘和UIMenuController不能同时出现效果预览 解决方案 史上最详细的iOS之事件的传递和响应机制-原理篇 iOS响应链全家桶 此方案是通过改变响应链来解决的,如果对响应链不了解的先去补一下这方面的知识...在保证UITextView第一响应者的前提下,我们可以覆盖改变UITextView的nextResponder,让nextResponder指向UIMenuController菜单事件的执行者;同时也要注意...键盘和UIMenuController并存问题解决

    1.8K20

    编码篇-iOS开发中的奇巧小伎

    7.统一收起键盘 8.导入自定义字体库 9.动态方法的动态执行 10.isKindOfClass和isMemberOfClass的区别 11.Label字体大小 12.为UIView某个角添加圆角 13...光标 37、当UITextView/UITextField中没有文字,禁用回车键 38、通知监听APP生命周期 39、获取collectionViewCell在屏幕中的frame 40、UITextField...文字周围增加边距 41、比较两个UIImage是否相等** 42、代码方式调整屏幕亮度 43、float数据取整四舍五入 44、让正在滑动的scrollView停止滚动(不是禁止,而是暂时停止滚动).../UITextField光标 textField.tintColor = [UIColor clearColor]; 37、当UITextView/UITextField中没有文字,禁用回车键 textField.enablesReturnKeyAutomatically...// 设置某个键盘颜色 textField.keyboardAppearance = UIKeyboardAppearanceAlert; // 设置工程中所有键盘颜色 [[UITextField

    5.4K10

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

    在iOS或Android等移动端开发过程中,经常遇到很多需要我们输入信息的情况,例如登录要输入账号密码、查询要输入查询信息、注册或申请需要填写一些信息等都是通过我们键盘来进行输入的,在iOS开发过程中...textFieldDidEndEditing: 二 键盘的弹出与收起 2.1 弹出键盘的控制   关于键盘的弹出与收起问题,从上面的响应过程分析可知,键盘的弹出对于UITextField和UITextView...则不弹出键盘 } //UITextView调用此方法 - (BOOL)textViewShouldBeginEditing:(UITextView *)textView{ //返回YES是弹出键盘...关于收起键盘,我们通常有两种做法如下: 一是通过我们的键盘上的【return/完成】按键的点击事件来设置 二是设置点击空白处就收起键盘,这种方法现在比较普遍   这两种做法在UITextField和UITextView...  还是在之前的分析中,我们知道在键盘弹出和收起,系统都会发出对应的通知,所以我们可以在收到键盘弹出的时候判断键盘的位置和当前输入文本框的位置,如果有遮挡,就将当前视图进行一个向上平移,在收到键盘回收的通知就平移到原先的位置

    3.6K60

    iOS表情键盘的完整实现

    接下来看一下微博国际版,国际版调起表情键盘是有光标的,是一个"真正的"键盘,但是想要拖拽光标的时候,很大概率上会触发到保存图片的行为(如下图所示),导致根本没办法拖动光标。 ?...emoji有本地图片的话会直接换成本地的图片 * * @param attributedString 可能包含表情包的attributedString * @param font 表情图片的对齐字体大小...真正的键盘也就是说调起表情键盘输入框是有光标的,能进行拖拽光标、选中区域等的操作,这样的体验才是与系统键盘一致的。...其实系统已经提供好了接口给我们直接使用,UITextView和UITextField都有的inputView和inputAccessoryView就是用来实现自定义键盘的,这两个属性的定义如下: //...就会从4个字符变成1个字符,这里是有差值的,如果不处理的话就会出现上面提到的微博国际版中复制黏贴输入框的表情会导致光标位置不对,甚至莫名其妙多出前后空格的问题。

    2K30

    ios学习——键盘的收起

    在开发过程中,我们经常会用到UITextField、UITextView等文本框,然后这些文本框在点击之后会自动成为第一响应者(FirstResponder),并自动弹出软键盘。...具体解决方案有两种: 1、在当前页面设置点击事件,当点击事件发生,注销当前视图的第一响应者或者设置当前摄入结束。...当点击事件发生在非选中区域,则键盘会自动回收: 1 //在viewDidLoad中 添加点击手势,为了关闭键盘的操作 2 UITapGestureRecognizer *tap1 = [[UITapGestureRecognizer...2、利用键盘上的 回车键 来进行设置当前UITextField、UITextView等文本框不是第一响应者,这种方法对UITextField、UITextView的应用不一样,需要区别进行。   ...但是,我们可以根据UITextViewDelegate提供的方法对键盘输入的值进行判断,如果为回车键(\n)则设置当前UITextView不是第一响应者,否则不操作。

    1.9K60

    iOS键盘键盘遮挡库 KKInputAvoidKeyBoard 每个 UITextField 都可以自己控制

    KKInputAvoidKeyBoard 输入框防键盘遮挡库 每个输入框拥有自己独立的开关 每个输入框可以自定义输入框到键盘距离 环境: Xcode:Xcode 8.2 Swift:swift3+ 接入和...demo: pod 'KKInputAvoidKeyBoard' ---- 针对 UITextField UITextView 增加如下两个属性设置 /* 键盘遮挡后,是否自动调整,防止键盘遮挡 */...var isAvoidKeyBoardEnable: Bool /* 键盘顶起后,底部距离键盘的距离 */ var avoidKeyBoardDistance: CGFloat 并且我们公司做各种信息录入...,有大量的输入框,自定义键盘,自定义 inputView 等,均已测试无问题、稳定。...每个输入框拥有自己独立的开关 每个输入框可以自定义输入框到键盘距离

    1.5K40

    【IOS开发基础系列】UITextView专题

    包括一些信息,例如如何调整字间距以及缩放。最终,该对象包含的信息将用于文本绘制。该参数可为 nil 。 返回值         一个矩形,大小等于文本绘制完将占据的宽和高。...size 参数是一个constraint,用于在绘制文本作为参考。但是,如果绘制完整个文本需要更大的空间,则返回的矩形大小可能比 size更大。...特殊情况         为了计算文本块的大小,该方法采用默认基线。如果NSStringDrawingUsesLineFragmentOrigin未指定,矩形的高度将被忽略,同时使用单线绘制。...(译者注:字体大小+行间距=行距)     NSStringDrawingUsesDeviceMetrics:         计算布局使用图元字形(而不是印刷字体)。         ...Use the image glyph bounds(instead of the typographic bounds) when computing layout. 1.2.3 绘制TextView底部出现高度不定的细微黑线

    42440

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

    设计iOS中随系统键盘弹收和内容文字长度自适应高度的文本框     文本输入框是多数与社交相关的app中不可或缺的一个控件,这些文本输入框应该具备如下的功能: 1.在键盘为弹起,输入框悬浮在界面底部...2.当键盘弹起,输入框位置上移至键盘上方,并且动画应与键盘同步。 3.当输入的文字超出一行,输入框应想用的进行高度扩展。...//文本控件中文字输入控件     @IBOutlet weak var ourTextField: UITextView!     ... iOS9后可用 可以监听的与键盘相关信息的通知有如下几种: public let UIKeyboardWillShowNotification: String//键盘将要出现 public let UIKeyboardDidShowNotification...: String//键盘已经出现 public let UIKeyboardWillHideNotification: String//键盘将要隐藏 public let UIKeyboardDidHideNotification

    1.4K20

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

    另外一种方法是直接在当前控制器(的界面)上以动画(甚至是没有动画)的形式弹出一个UITextView,在UITextView上修改文本内容,修改完成后再隐藏/移除UITextView,把内容重新显示到tableView...做的好的同学,可能还不忘弹出UITextView给tableView添加一个蒙版或者模糊效果以突出重点,提高用户的体验度。以上的两种方式算是中规中矩。...,以让UITextView正好遮盖住label 把cell上的内容显示到UITextView上。...如果,当前正处在编辑状态,那么再次点击cell就保存内容、结束编辑(退出键盘) // 否则,进入编辑状态 if ([self endEditForIndexPath:indexPath...如果,当前正处在编辑状态,那么再次点击cell就保存内容、结束编辑(退出键盘);否则,进入编辑状态 - (BOOL)endEditForIndexPath:(NSIndexPath *)indexPath

    7.8K40

    iOS 文本输入控制(献上框架)

    提前监听在使用索引功能时弊端 但是在处理带索引输入的时候,会出现下图情况: ?...在这里限制了非法字符:比如在该代理方法限制空格为非法字符,那么在输入到jian s的时候,就会出现点击无反应,因为此时已经有非法字符出现,文本不允许录入。...若只能输入英文、特殊字符、数字等,就将键盘的索引关掉,并且将键盘种类更改,让用户不能切换到中文键盘(因为中文键盘自带索引,关不掉),方法如下: //关索引 tf.autocorrectionType =...UITextAutocorrectionTypeNo; //换键盘 tf..keyboardType = UIKeyboardTypeASCIICapable; UITextView 的处理方法和 UITextField...YBTextControlType_none, //无限制 YBTextControlType_number, //数字 YBTextControlType_letter, //字母(包含大小

    1.1K120

    键盘工具栏的快速集成--IQKeyboardManager

    转自:http://www.cnblogs.com/gaoxiaoniu/p/5333187.html 键盘工具栏的快速集成--IQKeyboardManager IQKeyboardManager,是一个键盘工具栏的库...默认支持UITextField、UITextView、UIWebView、UIScrollView、UITableView、UICollectionView 左右两个切换按钮用来切换不同的文本框 会根据文本框的键盘类型对弹出键盘的样式做出调整...排列依据是看addSubView的先后顺序 右边的done是用来收起键盘的 另外也可以设置点击空白区域收起键盘的属性 中间的文字默认是文本框的占位文字 因为这个库是单例模式的 也就是说无论在哪设置了一个属性...manager.enable = YES; //控制点击背景是否收起键盘 manager.shouldResignOnTouchOutside = YES; //控制键盘上的工具条文字颜色是否用户自定义...= YES; //设置占位文字的字体 manager.placeholderFont = [UIFont boldSystemFontOfSize:17]; //控制是否显示键盘上的工具条

    1.4K110
    领券