`

iOS autolayout 下 键盘 遮挡 处理 keyboard handler move up

    博客分类:
  • ios
 
阅读更多

  

在ios 中  由于键盘出现后会遮挡屏幕下面区域, 所以会有需求当键盘出现的时候 提升下方的view

 

在autolayout 下  之前的计算x,y的方法很可能没法正常工作,需要新的解决办法

 

 

新办法的基本思想是调整需要上移的view的bottomConstraint, 让他加上键盘的高度

 

 

具体逻辑是

 

1. 监听键盘事件UIKeyboardWillShowNotification

2. 获取键盘高度, 注意要获取 UIKeyboardFrameEndUserInfoKey 这个值,其他的值在英文键盘也许OK,但在中文键盘下会出错

3. 提升目标view的bottomConstraint, 要注意的是rotation时 keyboard的高会变, 所以要注意更新

 

 

上代码

   [[NSNotificationCenter defaultCenter] addObserverForName: UIKeyboardWillShowNotification
     
                                                      object: nil
                                                       queue: nil
                                                  usingBlock: ^(NSNotification *note){
         NSDictionary* userInfo = note.userInfo;
         CGRect keyboardFrame = [[userInfo objectForKey: UIKeyboardFrameEndUserInfoKey] CGRectValue];
         //keyboardSlideDuration is an instance variable so we can keep it around to use in the "dismiss keyboard" animation.
         keyboardSlideDuration = [[userInfo objectForKey: UIKeyboardAnimationDurationUserInfoKey] floatValue];
         
         // keyboard height will change during rotation, so bottomConstraint need to keep update
         if (self.bottomConstraint.constant != keyboardFrame.size.height) {
             //             CLog(@"move up");
             self.bottomConstraint.constant = keyboardFrame.size.height;
             
             [UIView animateWithDuration: keyboardSlideDuration
                                   delay: 0
                                 options: 0
                              animations:^{
                                  [self.view layoutIfNeeded];
                              }
                              completion: nil
              ];
         }
         
     }
     ];
    
    [[NSNotificationCenter defaultCenter] addObserverForName: UIKeyboardWillHideNotification
                                                      object: nil
                                                       queue: nil
                                                  usingBlock: ^(NSNotification *note){
          self.bottomConstraint.constant = 0;
          [UIView animateWithDuration: keyboardSlideDuration
                                delay: 0
                              options: 0
                           animations:
                                       ^{
                                           [self.view layoutIfNeeded];
                                                                                                  
                                       }
                           completion: nil];
        }
     ];
    

 

 

 

 

 

0
0
分享到:
评论

相关推荐

    iOS AutoLayout的代码实现

    AutoLayout是iOS开发中用于构建灵活且响应式用户界面的重要技术。它允许开发者定义界面元素之间的关系,确保在不同尺寸的屏幕(如iPhone、iPad或不同分辨率)上都能正确显示。在本教程中,我们将专注于使用Visual ...

    ios-键盘遮挡输入框处理.zip

    标题"ios-键盘遮挡输入框处理.zip"所提及的问题正是针对这种情况,而压缩包中的"SCAutoMove"可能是提供了解决方案的一个类或者框架。下面我们将详细讨论如何处理键盘遮挡输入框的问题,并探讨可能的解决方案。 首先...

    iOS autolayout+scrollview

    在iOS开发中,AutoLayout和UIScrollView的结合使用是构建可扩展、自适应用户界面的关键技术。本文将深入探讨如何在纯代码环境下,利用AutoLayout来布局UIScrollView,使其能适应不同尺寸的屏幕,提供良好的用户体验...

    ios-Keyboard键盘覆盖问题.zip

    在iOS开发中,当用户在使用输入框时,弹出的虚拟键盘经常会出现遮挡输入框的情况,这会给用户带来不便,影响用户体验。这个“ios-Keyboard键盘覆盖问题.zip”压缩包提供了解决这一问题的方法,让我们来深入探讨一下...

    ios键盘遮挡问题

    5. **键盘 dismissal options**:iOS提供了键盘的dismissal options,如UIKeyboardDismissModeInteractive,允许用户通过拖动键盘来隐藏它,这在某些情况下可以减轻遮挡问题。 6. **自定义布局**:对于更复杂的场景...

    ios autolayout

    **iOS AutoLayout 知识详解** AutoLayout 是 iOS 开发中的一个重要组成部分,它允许开发者创建适应不同屏幕尺寸和设备方向的用户界面。在 iOS 7 及以后的版本中,Apple 引入了 AutoLayout 作为布局管理的主要工具,...

    iOS8 Autolayout官方文档(苹果官方自动布局)

    Apple从iOS6加入了Auto Layout后开始就比较委婉的开始鼓励、建议开发者使用自适应布局,但是到目前为止,我感觉大多数开发者一直在回避这个问题,不管是不是由于历史原因造成的,至少他们在心底还坚守着固定布局的老...

    ios autolayout tableview

    在iOS开发中,AutoLayout是苹果提供的一种强大的布局系统,用于自动管理用户界面元素的位置和大小,以适应不同屏幕尺寸和设备方向。当涉及到UITableView时,AutoLayout的应用变得尤为重要,因为表格视图通常包含大量...

    ios-VFL语言实现AutoLayout,屏幕适配.zip

    在iOS开发中,AutoLayout是一种强大的布局管理系统,用于在不同屏幕尺寸和方向上创建自适应用户界面。Visual Format Language (VFL) 是一种简洁的语法,用于以字符串形式描述AutoLayout的约束。在这个"ios-VFL语言...

    戴铭《深入剖析AutoLayout》

    对iOS里AutoLayout的深入理解和剖析

    IOS6 autolayout例子

    AutoLayout是iOS6中引入的一项重大更新,旨在为开发者提供一套强大的界面布局系统,能够自动管理视图(views)在不同屏幕尺寸和设备方向下的位置和大小。AutoLayout通过定义一系列约束(constraints)来确定视图之间...

    ios Autolayout自动布局从入门到精通

    这是一份ios自动布局的文件,我是找了很久才找到的,学习这个自动布局其实是相当容易的

    ios-自定义键盘。.zip

    在iOS开发中,自定义键盘是一项常见的需求,它允许开发者为应用程序提供独特的输入体验,以满足特定场景或用户群体的需求。本项目“ios-自定义键盘”是一个GitHub上的开源资源,作者为cgmsuccess,提供了创建自定义...

    iOS利用AutoLayout自适应Cell高度,优化UITableViewCell高度计算

    最近在研究UITableViewCell高度的自适应,在网上找到了一个国内人员开发的工具类,自己下载下来研究了一下,感觉非常不错,用起来也非常方便,这是高手的博客地址...用这个之前要会使用AutoLayout

    xamarin学习笔记B06(ios的Autolayout布局技术)

    在iOS应用开发中,AutoLayout是一项至关重要的技术,特别是在Xamarin.iOS环境中,它为开发者提供了强大的界面布局能力,使得应用程序可以在不同尺寸和分辨率的设备上自适应显示。本笔记将深入探讨Xamarin中的...

    swift-SXTextView一个TextView无限输入不被键盘遮挡

    在iOS应用开发中,用户界面的交互体验是至关重要的,特别是在处理文本输入时。...通过学习这个项目,开发者可以了解到如何在自己的应用中处理键盘遮挡问题,提升用户体验,同时也能深入理解这两个强大工具的用法。

    iOS虚拟键盘上添加动态按钮

    在iOS开发中,虚拟键盘(UIKeyboard)是用户与输入框进行交互的重要组成部分。有时,开发者可能需要在虚拟键盘上添加自定义的功能按钮,以增强用户体验或者实现特定业务需求。这个话题,"iOS虚拟键盘上添加动态按钮...

    ios_autolayout_demo:iOS 自动布局

    在iOS开发中,AutoLayout是苹果提供的一种强大的界面布局机制,它允许开发者为不同尺寸和方向的设备创建灵活且响应式的用户界面。本项目“ios_autolayout_demo”旨在通过编程方式演示如何使用NSLayoutConstraint来...

    iOS8AutoLayout-Demo3

    在iOS应用开发中,UI设计和布局是至关重要的部分,特别是在iOS8及更新版本中,引入了AutoLayout和Size Classes,极大地增强了界面的适应性和可维护性。本Demo3将详细解析如何在Storyboard中利用这两种技术来构建...

Global site tag (gtag.js) - Google Analytics