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

为UITextField或UITextView显示键盘时调整界面

为了调整界面以适应 UITextField 或 UITextView 的键盘显示,您可以使用以下方法:

  1. 使用 UIKeyboardWillShowNotificationUIKeyboardWillHideNotification 通知来监听键盘的显示和隐藏。
  2. 在通知中,获取键盘的高度和动画时长,并根据这些信息调整界面。
  3. 使用 UIScrollView 来包含您的输入控件,并在键盘显示时调整 contentInset 属性,以便在输入时不遮挡输入控件。

以下是一个简单的示例代码:

代码语言:swift
复制
override func viewDidLoad() {
    super.viewDidLoad()
    
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil)
}

@objc func keyboardWillShow(notification: NSNotification) {
    guard let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue else { return }
    guard let duration = notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? Double else { return }
    guard let curve = notification.userInfo?[UIResponder.keyboardAnimationCurveUserInfoKey] as? UInt else { return }
    
    let insets = UIEdgeInsets(top: 0, left: 0, bottom: keyboardSize.height, right: 0)
    
    UIView.animate(withDuration: duration, delay: 0, options: UIView.AnimationOptions(rawValue: curve), animations: {
        self.scrollView.contentInset = insets
        self.scrollView.scrollIndicatorInsets = insets
    }, completion: nil)
}

@objc func keyboardWillHide(notification: NSNotification) {
    guard let duration = notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? Double else { return }
    guard let curve = notification.userInfo?[UIResponder.keyboardAnimationCurveUserInfoKey] as? UInt else { return }
    
    UIView.animate(withDuration: duration, delay: 0, options: UIView.AnimationOptions(rawValue: curve), animations: {
        self.scrollView.contentInset = .zero
        self.scrollView.scrollIndicatorInsets = .zero
    }, completion: nil)
}

这段代码将监听键盘的显示和隐藏,并在键盘显示时调整 UIScrollViewcontentInset 属性,以便在输入时不遮挡输入控件。当键盘隐藏时,将恢复 contentInset 的值。

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

相关·内容

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

UITextField 属性 (1) PlaceHolder 属性 PlaceHolder 属性 : 属性值是一个字符串, 再文本框没有输入内容, 文本框内显示的灰色文本, 用于作为文本框提示信息...; -- Appears while editing : 编辑内容显示清除按钮; -- Appears unless editing : 除了编辑之外, 都会显示清除按钮; -- Is always...触摸背景关闭虚拟键盘 (1) 修改 Custom Class  修改背景类别 :  -- 修改原因 : 默认的背景控件 UIView, 该控件没有 IBAction 事件, 因此需要将背景控件设置...: " 方法 : 选中 UITextView 控件内文本激发该方法; 4....UITextView 虚拟键盘关闭 (1) 需求分析 UITextViewUITextField 中使用的虚拟键盘对比 :  -- UITextField 虚拟键盘 : 右下角的键是 Done,

6.6K20

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

最近在项目中经常用到UITableView中的cell中带有UITextFieldUITextView的情况,然后在这种场景下,当我们点击屏幕较下方的cell进行编辑,这时候键盘弹出来会出现遮挡待输入的...二 主控制器UIViewController其子类   其实最开始我就是用的UITableViewController,结果要提示的要提示的tips总是显示不设定的位置上,后来才得以发现的这个bug...2.1 UITextFieldUITextView点击之后的详细流程   在对cell进行封装和自定义的时候,我们需要考虑我们的UITextFieldUITextView从点击编辑框到结束编辑的整个过程是怎么样的...下面的流程就是UITextFieldUITextView在整个编辑过程中的详细流程步骤: 在成为第一响应者之前,文本框调用其代理的textFieldShouldBeginEditing:  方法来允许阻止其第一响应者...  在前面的2.1的UITextFieldUITextView点击之后的详细流程分析中我们知道,在点击文本之后弹出键盘时会发送一个UIKeyboardWillShowNotification的通知,

3.9K80

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

在iOSAndroid等移动端开发过程中,经常遇到很多需要我们输入信息的情况,例如登录要输入账号密码、查询要输入查询信息、注册申请需要填写一些信息等都是通过我们键盘来进行输入的,在iOS开发过程中...一 文本框输入完整的响应过程    首先,我们要对UITextFieldUITextView的输入输出进行控制,需要借助其对应的代理协议UITextFieldDelegateUITextViewDelegate...textFieldDidEndEditing: 二 键盘的弹出与收起 2.1 弹出键盘的控制   关于键盘的弹出与收起问题,从上面的响应过程分析可知,键盘的弹出对于UITextFieldUITextView...如果需要进行控制,我们知道其实在弹出之前是调用了UITextFieldDelegateUITextViewDelegate的以下方法来控制是否使当前文本框设置第一响应者( becoming the...- (self.view.frame.size.height - kbSize.height); //将试图的Y坐标向上移动offset个单位,以使界面腾出开的地方用于软键盘显示 if

3.5K60

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

33、获取手机RAM容量 34、在UITextView显示html文本 35、选中textField或者textView所有文本(我这里以textView例) 36、隐藏UITextView/UITextField...光标 37、当UITextView/UITextField中没有文字,禁用回车键 38、通知监听APP生命周期 39、获取collectionViewCell在屏幕中的frame 40、UITextField...自己键盘打出的 % 汉字形式下的还是会报警告,并且不会显示出来.把上文的粘贴过去使用吧!.../UITextField光标 textField.tintColor = [UIColor clearColor]; 37、当UITextView/UITextField中没有文字,禁用回车键 textField.enablesReturnKeyAutomatically...// 设置某个键盘颜色 textField.keyboardAppearance = UIKeyboardAppearanceAlert; // 设置工程中所有键盘颜色 [[UITextField

5.3K10

ios学习——键盘的收起

在开发过程中,我们经常会用到UITextFieldUITextView等文本框,然后这些文本框在点击之后会自动成为第一响应者(FirstResponder),并自动弹出软键盘。...然而,没有自动定义好的软键盘的回收。今天,我在开发过程中就遇到了这个问题,首先,软键盘收起会发生在两种情况下,一是当前区域非第一响应者,二是当前区域的输入结束。...当点击事件发生在非选中区域,则键盘会自动回收: 1 //在viewDidLoad中 添加点击手势,为了关闭键盘的操作 2 UITapGestureRecognizer *tap1 = [[UITapGestureRecognizer...2、利用键盘上的 回车键 来进行设置当前UITextFieldUITextView等文本框不是第一响应者,这种方法对UITextFieldUITextView的应用不一样,需要区别进行。   ...但是,我们可以根据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

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

IQKeyboardManager,是一个键盘工具栏的库: 默认支持UITextFieldUITextView、UIWebView、UIScrollView、UITableView、UICollectionView...左右两个切换按钮用来切换不同的文本框 会根据文本框的键盘类型对弹出键盘的样式做出调整  排列依据是看addSubView的先后顺序 右边的done是用来收起键盘的  另外也可以设置点击空白区域收起键盘的属性...manager.enable = YES; //控制点击背景是否收起键盘 manager.shouldResignOnTouchOutside = YES; //控制键盘上的工具条文字颜色是否用户自定义...注意这个颜色是指textfile的tintcolor manager.shouldToolbarUsesTextFieldTintColor = YES; //中间位置是否显示占位文字...manager.shouldShowTextFieldPlaceholder = YES; //设置占位文字的字体 manager.placeholderFont = [UIFont boldSystemFontOfSize:17]; //控制是否显示键盘上的工具条

873140

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

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

1.4K110

输入框高度随输入内容变化

另一个类似的输入框UITextField不支持换行哦,设置什么lineBreakMode啊,lineNumber(好像没这个属性)啊都不可以换行!我以前在这上面栽过跟头。...UITextField输入满了会把文字顶到前面看不见的地方,但还不支持左右拖动!这一点比Android体验要差!...好了,知道其集成UIScrollView就好办了,因为UITextView只有在输入内容超过其显示范围才可以拖动,那就知道输入文字的bound就是UIScrollView的contentSize。...按我以前的经验,行高差不多是字体大小的 4/3 倍.这样设值显示效果一般都挺好。所以可以设值一个宏定义来处理与字体相关的高度。...对于第二点,根据计算出的高度重绘界面布局即可。这里我用的是自动布局,每次高度改变就刷新布局关系就行。

2.5K10

《iOS Human Interface Guidelines》——Text Field文本域

API NOTE 查看UITextField学习更多关于定义文本域并且自定义显示图像和按钮的内容。...一个文本域: 是一个固定高度的圆角区域 当用户点击它自动显示键盘 可以包含系统提供的按钮,比如书签按钮 可以显示使用多种风格的文本(查看UITextView学习更多关于这个的内容) 使用文本域从用户获取小数量的信息...比如说,你可以在文本域的左边右边显示自定义的图片,或者你可以添加一个系统提供的按钮,比如书签按钮。一般来说,你应该在文本域的左边显示它的用途,在右边显示其额外的特性,比如书签。...文本域可以显示占位文本——比如名称(或者地址)——当文本域中没有文本的时候。 定义符合你希望用户输入的内容类型的键盘类型。比如说,你可能想要让用户输入URL、PIN或者电话号码变得简单。...阅读Managing the Keyboard学习更多关于在你的app中管理键盘的内容。注意你无法控制键盘的输入方法和布局,因为这些取决于用于的语言设置。 本文翻译自苹果官方开发文档

43720

iOS开发中利用runtime设置UITextView的默认文字

版权声明:本文博主原创文章,未经博主允许不得转载。...https://blog.csdn.net/u010105969/article/details/75258532 大家都知道UITextField有一个属性placeholder是用来设置默认文字的...之前在项目中也遇到过设置UITextView的默认文字的功能,当初的做法是在UITextView上添加一个UILabel,让UILabel来显示UITextView的默认文字。...今天在看别人的博客的时候发现了UITextField有一个placeholderLabel的属性,这个属性是UITextView的私有属性,我们可以通过runtime访问该属性。...我们可以通过创建一个UILabel,然后利用KVC将UITextView的placeholderLabel替换成我们自己创建的UILabel来达到设置UITextView默认文字的功能。

59620

iOS文本布局探讨之一——文本布局框架TextKit浅析

iOS文本布局探讨之一——文本布局框架TextKit浅析 一、引言         在iOS开发中,处理文本的视图控件主要有4中,UILabel,UITextFieldUITextView和UIWebView...其中UILabel与UITextField相对简单,UITextView是功能完备的文本布局展示类,通过它可以进行复杂的富文本布局,UIWebView主要用来加载网页或者pdf文件,其可以进行HTML,...二、TextKit框架的结构         界面在进行文本的渲染,有下面几个必要条件: 1.要渲染展示的内容。 2.将内容渲染在某个视图上。 3.内容渲染在视图上的尺寸位置和形状。...三、使用TextKit进行文本布局流程         个人理解,TextKit主要用于更精细的处理文本布局以及进行复杂的图文混排布局,使用TextKit进行文本的布局展示十分繁琐,首先需要将显示内容定义一个.../* 默认为NO,如果设置YES,则会将空格等隐形字符显示出来 */ @property(NS_NONATOMIC_IOSONLY) BOOL showsInvisibleCharacters; /

1.7K10

iOS表情键盘的完整实现

首先是QQ和微信,这两者差不多,切换到表情键盘的时候都是没有光标的,这样的用户体验是非常不好的,没有办法在输入表情的时候框选区域,也不能拖动光标进行特定位置的复制黏贴删除等操作,微信甚至在输入框里显示的都不是点击的表情图片...接下来看一下微博国际版,国际版调起表情键盘是有光标的,是一个"真正的"键盘,但是想要拖拽光标的时候,很大概率上会触发到保存图片的行为(如下图所示),导致根本没办法拖动光标。 ?...真正的键盘也就是说调起表情键盘输入框是有光标的,能进行拖拽光标、选中区域等的操作,这样的体验才是与系统键盘一致的。...其实系统已经提供好了接口给我们直接使用,UITextViewUITextField都有的inputView和inputAccessoryView就是用来实现自定义键盘的,这两个属性的定义如下: //...一番查找之后才找到一个比较隐蔽的属性:textDragInteraction,直接设置NO就能禁止掉NSTextAttachment的拖拽交互。

1.9K30

iOS UI控件了解一下

iOS中所有能看到的内容都是view其子类。...当一个view设置bounds,会把自己当成一个容器,定义自己的边界大小以及左上角的初始坐标。当子视图添加到此视图,会根据bounds指定的原点(0,0)计算frame,而非左上角。...在App中UITextField出现频率也比较高; (2)iOS系统借助虚拟键盘实现输入,当点击输入框,系统会自动调出键盘,方便 你进一步操作。...在你不需要输入的时候,可以使用收回键盘的方法,收回弹出的键盘; (3)UITextField和UILabel相比,UILabel主要用于文字显示,不能编辑, UITextField允许用户编辑文字(输入...6)输入控制: UITextField类提供了许多控制输入的API,包括密码模式、键盘样式、自定义键盘等(详见下表) ?

2.6K20
领券