实现view底部控件随着键盘的弹出而上移的效果

2024-02-18 00:30

本文主要是介绍实现view底部控件随着键盘的弹出而上移的效果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ShevaKuilin 2016年03月22日发布

ShevaKuilin 2016年03月22日发布

ShevaKuilin 2016年03月22日发布

ShevaKuilin 2016年03月22日发布

ShevaKuilin 2016年03月22日发布


下面就来具体看看如何实现:

1.首先,我们在storyboard中找到这个底部控件outLayout的bottom约束,也就是找到这个控件与view底部的约束距离,如图:

找到后,将这个约束在.m中关联一个输出口,这样我们就得到一个全局的NSLayoutConstraint属性,来控制这个控件的constraint,如图:

2.最重要的一步,我们来完成实现view底部控件随着键盘的弹出而上移的效果的方法

-(void)keyboardAppear:(NSNotification *)aNotification
{NSDictionary * userInfo = aNotification.userInfo;CGRect frameOfKeyboard = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];CGRect frame = self.view.frame;CGFloat height = frame.size.height - frameOfKeyboard.origin.y + 64;//加64是因为存在navigation导致view本身就整体下移了64个单位self.bottomSpacingConstraint.constant = height;
}

上面这个方法中的思路我来解释一下,首先我们声明一个NSDictionary来储存aNotification中的userInfo,可以简单地说,aNotification中储存着这个键盘中的所有被监听的属性信息,具体有什么内容可以自己讲其打印出来查看。然后,我们再分别获取到键盘和view的frame,最重要的地方来了,也是整个方法的核心思路:就是用view的高度减去键盘的y值,那么得到的就是键盘的最上面的点和view底部的间距,这也就是我们想要得到的控件上移时与view底部的距离,由于我们在storyboard中设置了outLayout的底部约束,所以,只要将我们最开始声明的全局NSLayoutConstraint属性(也就是底部约束)的constant重新赋值成我们得到的间距,就完成了这种效果的生成条件。

3.完成上述步骤后,我们在viewDidLoad中声明如下两个通知,如下:

//键盘弹出时
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardAppear:) name:UIKeyboardWillShowNotification object:nil];
//键盘消失时
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardAppear:) name:UIKeyboardWillHideNotification object:nil];

在键盘弹出时,我们调用keyboardAppear方法,由于键盘弹出,我们得到的是弹出的键盘的y与view底部的间距,当键盘撤销时,我们得到的同样是撤销后的键盘的y(也就是0,因为已经消失了,高度为0)与view底部的间距。



在自己的代码中,写的更加简单粗暴

-(IBAction)closeKeyboard{

    // 关闭键盘

    [_tv resignFirstResponder];

    // 控件下移

    _topSpacingConstraint.constant = 70;

}


-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{

    if ([text isEqualToString:@"\n"]) {

        [self closeKeyboard];

        return NO;

    }

    return YES;

}


// 打开键盘控件上移

-(BOOL)textViewShouldBeginEditing:(UITextView *)textView{

    NSLog(@"打开键盘");

    // 控件上移

    _topSpacingConstraint.constant = 0;

    

    return YES;

}



这篇关于实现view底部控件随着键盘的弹出而上移的效果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/719470

相关文章

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法