键盘弹出后输入框上移的解决方案

键盘弹出后遮挡了textField是一种非常常见的情况,解决方案有很多种,我在这里介绍其中一种方式。

这种方式能够解决键盘弹出之后键盘高度发生变化(例如中文键盘,输入字母之后最上面会多出一块候选单词的区域),textField或view的位置变化。

首先对controller添加消息监听。

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

notification的name是系统预设的值。该值常用的有以下四种:

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

分别代表了键盘将要显示,显示完成,将要隐藏,隐藏完成的四个状态。

根据需要选择你要处理的状态,但如果对UIKeyboardWillShowNotification添加监听,在处理view位置变化的时候可能会因为系统自带的键盘动画导致失效。

接下来是消息的处理:

#pragma mark - Notification
- (void)keyboardDidShow:(NSNotification *)noti
{
    NSDictionary *info = [noti userInfo];
    NSValue *aValue = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
    
    CGSize keyBoardSize = [aValue CGRectValue].size;
    CGRect rect = _bottomBarV.frame;
    rect.origin.y = self.view.frame.size.height - keyBoardSize.height - rect.size.height;
    _bottomBarV.frame = rect;
}

- (void)keyboardWillHide:(NSNotification *)noti
{
    CGRect rect = _bottomBarV.frame;
    rect.origin.y = self.view.frame.size.height - rect.size.height;
    _bottomBarV.frame = rect;
}

首先,这段代码需要你根据需要自己做一些调整。我贴出来的这段代码适用的场景是一个位于屏幕最下方的view(_bottemBarV)当键盘弹起时,位移到键盘最上方。

其次,在show消息处理中,取到了一个key值为UIKeyboardFrameEndUserInfoKey。

该值为系统预设:

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

UIKeyboardFrameBeginUserInfoKey和UIKeyboardFrameEndUserInfoKey描述的是两种不同的状态,键盘大小要发生变化时,Begin代表的是变化之前的状态,End代表的是变化之后的状态,所以这个地方小心不要弄混。

这个场景中,我们希望的是键盘高度变化之后,view相应的做出变化,因此取的是End状态。

代码中的keyBoardSize即代表了键盘的宽,高。然后你就可以根据键盘的大小,改变你想改变的view位置了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当我们在使用手机或平板电脑时,点击输入框时,系统会自动弹出键盘。软键盘弹出时,输入框键盘遮挡住,导致我们无法继续输入或者查看我们输入的内容。这时,页面会自动上移,将输入框移到可视范围内,以便我们继续输入。 页面顶部被软键盘遮挡是因为系统默认情况下,软键盘弹出在页面底部。为了解决这个问题,可以通过调整页面布局或使用特定的技术手段来解决。 一种常见的解决方案是使用特定的组件或库来处理输入框键盘遮挡的问题。这些组件或库可以自动监听软键盘弹出事件,并在软键盘弹出时,自动调整页面布局,使输入框上移,从而避免输入框被遮挡。这种方式可以使页面的用户体验更好,避免用户在输入时受到干扰。 另一种解决方案是通过手动调整页面布局来解决输入框键盘遮挡的问题。这种方式需要开发人员手动监听软键盘弹出事件,在软键盘弹出时,通过改变页面布局,将输入框上移,使其显示在软键盘上方,从而避免被遮挡。这种方式相对复杂一些,需要开发人员对页面布局和软键盘事件有一定的了解。 总的来说,无论是使用特定的组件或库,还是通过手动调整布局,都可以解决输入框键盘遮挡的问题。通过这些解决方案,我们可以确保输入框在软键盘弹出时能够被正常显示,从而提供更好的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值