iOS 键盘相关

1.键盘出现消失时,参考的view变化的代码:

  • (void)viewDidLoad {

superviewDidLoad;

// Do any additional setup after loading the view.

__weaktypeof(self) weakSelf =self;

_textField= UITextField new;

_textField.backgroundColor = UIColor redColor;

self.view addSubview:_textField;

[_textField mas_makeConstraints:^(MASConstraintMaker *make) {

//left,right,centerx,y不能共存只能有其二

make.left.mas_equalTo(20);

//make.right.mas_equalTo(-60);

make.centerX.equalTo(weakSelf.view);

make.height.mas_equalTo(40);

make.bottom.mas_equalTo(0);

}];

//注册键盘通知

\[NSNotificationCenter defaultCenter addObserver:selfselector:@selector(keyboardWillChangeFrameNotification:) name:UIKeyboardWillChangeFrameNotification object:nil];

\[NSNotificationCenter defaultCenter addObserver:selfselector:@selector(keyboardWillHideNotification:) name:UIKeyboardWillHideNotification object:nil];

}

  • (void)keyboardWillChangeFrameNotification:(NSNotification *)notification {

//获取键盘基本信息(动画时长与键盘高度)

NSDictionary *userInfo = notification userInfo;

CGRect rect = userInfo\[UIKeyboardFrameBeginUserInfoKey CGRectValue];

CGFloat keyboardHeight= CGRectGetHeight(rect);

CGFloat keyboardDuration = userInfo\[UIKeyboardAnimationDurationUserInfoKey doubleValue];

//修改下边距约束

[_textField mas_updateConstraints:^(MASConstraintMaker *make) {

make.bottom.mas_equalTo(-keyboardHeight);

}];

//更新约束

[UIView animateWithDuration:keyboardDuration animations:^{

self.view layoutIfNeeded;

}];

}

  • (void)keyboardWillHideNotification:(NSNotification *)notification {

//获得键盘动画时长

NSDictionary *userInfo= notification userInfo;

CGFloat keyboardDuration = userInfo\[UIKeyboardAnimationDurationUserInfoKey doubleValue];

//修改为以前的约束(距下边距0)

[_textField mas_updateConstraints:^(MASConstraintMaker *make) {

make.bottom.mas_equalTo(0);

}];

//更新约束

[UIView animateWithDuration:keyboardDuration animations:^{

self.view layoutIfNeeded;

}];

}

  • (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

supertouchesBegan:touches withEvent:event;

self.view endEditing:YES;

}

相关推荐
终端安全笔记11 小时前
描述文件、企业证书、MDM 不是三个名字,是三层
android·ios·智能手机
传奇开心果编程12 小时前
【SwiftUI入门练中学】第1课 从零开始
学习·ui·ios·swiftui·swift
丿Wayne17 小时前
iOS Token 刷新实战(Actor 避免并发重复刷新)
ios·swift·token·actor·swift并发
终端安全笔记2 天前
iOS 27 给了租赁一个新工具,但它只认受监督的设备
android·网络·安全·ios
大熊猫侯佩2 天前
独立 App 首发完成 iPhone Duo 展开态适配
ios·swiftui·swift
光影少年2 天前
setImmediate 和 setTimeout(0) 的区别
android·前端·react.js·ios·前端框架
2501_916008892 天前
SSE 和 gRPC 流式接口如何抓包,调试 SSE 与 gRPC 流式接口
网络协议·计算机网络·网络安全·ios·adb·https·udp
HouWan2 天前
Flutter: MediaQuery.of(context) 为什么可能拖慢页面?
android·flutter·ios
用户38034165882972 天前
Broadcast Extension 里的 Live Activity:一次跨进程妥协
ios·音视频开发
匠测AI说2 天前
XCUITest 自动化全解:同进程白盒、XCTest 架构、自动同步机制与 iOS 端选型指南
测试工具·ios·自动化