美文网首页iOS 细节大集合
iOS 根据键盘弹出调整view的高度

iOS 根据键盘弹出调整view的高度

作者: rockyMJ | 来源:发表于2016-11-09 11:00 被阅读1692次

iOS 根据键盘弹出调整view的高度

效果图:


gif.gif

其实实现键盘高度的弹出,让咱们的界面view始终在键盘的上面,实现非常简单.
首先要知道,苹果有一些监听键盘状态的各种key

UIKIT_EXTERN NSString *const UIKeyboardWillShowNotification __TVOS_PROHIBITED;
UIKIT_EXTERN NSString *const UIKeyboardDidShowNotification __TVOS_PROHIBITED;
UIKIT_EXTERN NSString *const UIKeyboardWillHideNotification __TVOS_PROHIBITED;
UIKIT_EXTERN NSString *const UIKeyboardDidHideNotification __TVOS_PROHIBITED;

UIKIT_EXTERN NSString *const UIKeyboardFrameBeginUserInfoKey        NS_AVAILABLE_IOS(3_2) __TVOS_PROHIBITED; // NSValue of CGRect
UIKIT_EXTERN NSString *const UIKeyboardFrameEndUserInfoKey          NS_AVAILABLE_IOS(3_2) __TVOS_PROHIBITED; // NSValue of CGRect
UIKIT_EXTERN NSString *const UIKeyboardAnimationDurationUserInfoKey NS_AVAILABLE_IOS(3_0) __TVOS_PROHIBITED; // NSNumber of double
UIKIT_EXTERN NSString *const UIKeyboardAnimationCurveUserInfoKey    NS_AVAILABLE_IOS(3_0) __TVOS_PROHIBITED; // NSNumber of NSUInteger (UIViewAnimationCurve)
UIKIT_EXTERN NSString *const UIKeyboardIsLocalUserInfoKey           NS_AVAILABLE_IOS(9_0) __TVOS_PROHIBITED; // NSNumber of BOOL

// Like the standard keyboard notifications above, these additional notifications include
// a nil object and begin/end frames of the keyboard in screen coordinates in the userInfo dictionary.
UIKIT_EXTERN NSString *const UIKeyboardWillChangeFrameNotification  NS_AVAILABLE_IOS(5_0) __TVOS_PROHIBITED;
UIKIT_EXTERN NSString *const UIKeyboardDidChangeFrameNotification   NS_AVAILABLE_IOS(5_0) __TVOS_PROHIBITED;

// These keys are superseded by UIKeyboardFrameBeginUserInfoKey and UIKeyboardFrameEndUserInfoKey.
UIKIT_EXTERN NSString *const UIKeyboardCenterBeginUserInfoKey   NS_DEPRECATED_IOS(2_0, 3_2) __TVOS_PROHIBITED;
UIKIT_EXTERN NSString *const UIKeyboardCenterEndUserInfoKey     NS_DEPRECATED_IOS(2_0, 3_2) __TVOS_PROHIBITED;
UIKIT_EXTERN NSString *const UIKeyboardBoundsUserInfoKey        NS_DEPRECATED_IOS(2_0, 3_2) __TVOS_PROHIBITED;

这里我们用 UIKeyboardWillChangeFrameNotification来监听键盘frame的改变
1:添加通知的观察者

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyBoardFrameChange:) name:UIKeyboardWillChangeFrameNotification object:nil];
//当观察到键盘发生变化的通知后,就调用的方法
- (void)keyBoardFrameChange:(NSNotification *)userInfo{
//        UIKeyboardAnimationCurveUserInfoKey = 7;
//    UIKeyboardAnimationDurationUserInfoKey = "0.25";
//    UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {375, 258}}";
//    UIKeyboardCenterBeginUserInfoKey = "NSPoint: {187.5, 796}";
//    UIKeyboardCenterEndUserInfoKey = "NSPoint: {187.5, 538}";
//    UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 667}, {375, 258}}";
//    UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, 409}, {375, 258}}";
//    UIKeyboardIsLocalUserInfoKey = 1;
    
// {
//        UIKeyboardAnimationCurveUserInfoKey = 7;
//        UIKeyboardAnimationDurationUserInfoKey = "0.25";
//        UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {375, 258}}";
//        UIKeyboardCenterBeginUserInfoKey = "NSPoint: {187.5, 538}";
//        UIKeyboardCenterEndUserInfoKey = "NSPoint: {187.5, 796}";
//        UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 409}, {375, 258}}";
//        UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, 667}, {375, 258}}";
//        UIKeyboardIsLocalUserInfoKey = 1;
//    }
//   1.修改试图的transform属性,让视图跟着键盘变化而变化
//    ty = - 258 = 409 - view的高度;:表示键盘弹出的时候的值的变化
//    ty = 0 意:transform是一种状态,当回到初始值状态为0,表示键盘回到原来的位置
//    self.view.transform ==
//    1.1获取变化的值
    NSDictionary *keyBoardDict = userInfo.userInfo;
    CGRect endKeyBoardFrame = [keyBoardDict[UIKeyboardFrameEndUserInfoKey]CGRectValue];
//这里减去的是你需要调整的view的高度,如果view是全屏幕的可以用此方法
    CGFloat ty = endKeyBoardFrame.origin.y - [UIScreen mainScreen].bounds.size.height;
//   1.2修改transform属性,让视图变化
//   1.3让修改有动画,获取动画的时间
    CGFloat duration = [keyBoardDict[UIKeyboardAnimationDurationUserInfoKey]doubleValue];
    [UIView animateWithDuration:duration animations:^{
         self.view.transform = CGAffineTransformMakeTranslation(0, ty);
    }];
   
    
    
}

也可以学以致用,调整tableView的某一个cell可以在输入时到键盘上面

最后介绍一个强大的第三方

IQKeyboardManager
关于使用IQKeyboardManager的一些坑->(引用)

相关文章

  • iOS 根据键盘弹出调整view的高度

    iOS 根据键盘弹出调整view的高度 效果图: 其实实现键盘高度的弹出,让咱们的界面view始终在键盘的上面,实...

  • iOS - 根据键盘调整view位置

    效果图 知识点:通过通知监听键盘弹出,获取键盘弹出后的frame,以及完全弹出执行动画的时间--duration,...

  • iOS获取键盘高度

    iOS获取键盘高度 (1)注册监听,监听键盘的弹出 [[NSNotificationCenter defaultC...

  • iOS键盘弹出消失监听

    iOS 监听键盘的弹出,收起,并且拿到键盘的高度 //监听当键盘将要出现时 [[NSNotificationCen...

  • iOS键盘通知弹框使用小结

    项目开发中文本框输入的时候经常会用到键盘弹框遮挡的问题。解决办法就是根据底部键盘弹出的高度动态的改变对应view的...

  • iOS 根据弹出的键盘高度改变控件Frame

    键盘高度是不一样的所以不能写死 需要根据弹出的键盘动态获取 第一步 在需要的地方注册监听 第二步 实现监听的方法

  • view适应键盘弹出收回的高度

    这几天老有人问我当调键盘出来的时候view怎么自动适应才能不覆盖住textFiled,看好了 ok

  • javascript获取手机键盘的高度

    我们知道在原生中获取键盘的高度是一件很简单的事情,在iOS键盘弹出的时候系统会发出一个键盘弹出通知.我们获取这个通...

  • Android关于键盘相关知识

    弹出键盘和收起键盘 弹出键盘 关闭键盘 监听键盘的回车键 监听键盘弹出和收起以及键盘高度 最近开发总结(关于键盘监...

  • iOS11键盘弹出bug

    iOS11下键盘弹出覆盖输入框打印出获得键盘高度为0解决:CGSize keySize = [[dic objec...

网友评论

    本文标题:iOS 根据键盘弹出调整view的高度

    本文链接:https://www.haomeiwen.com/subject/hxbzuttx.html