资讯专栏INFORMATION COLUMN

输入框跟随键盘移动效果的实现

Alliot / 2431人阅读

摘要:系统自带的键盘上面的工具条视图并没有什么卵用由于系统自带的工具条随着键盘的隐藏也一起隐藏了而现在很多应用的需求的是键盘隐藏工具条停留在最底部所以我们需要自定义工具条或者说输入框吧,具体效果如图所示示例方式一修改约束方式这种方式需要在或中找

inputAccessoryView : 系统自带的键盘上面的工具条视图(并没有什么卵用)

由于系统自带的工具条随着键盘的隐藏也一起隐藏了,而现在很多应用的需求的是键盘隐藏工具条停留在最底部,所以我们需要自定义工具条(或者说输入框吧),具体效果如图所示:

Demo示例

方式一:修改约束 constant 方式

这种方式需要在storyboard或xib中找到输入框和父控件(控制器)的约束,代码中的self.bottomConstraint就是该约束,我们通过监听键盘的弹出和收回来更改约束的值,再加点动画效果,就是这么简单

- (void)viewDidLoad {
    [super viewDidLoad];

    // 监听键盘改变
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChange:) name:UIKeyboardWillChangeFrameNotification object:nil];
}

// 移除监听
- (void)dealloc{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}


// 监听键盘的frame即将改变的时候调用
- (void)keyboardWillChange:(NSNotification *)note{
    // 获得键盘的frame
    CGRect frame = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];

    // 修改底部约束
    self.bottomConstraint.constant = self.view.frame.size.height - frame.origin.y;

    // 执行动画
    CGFloat duration = [note.userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue];
    [UIView animateWithDuration:duration animations:^{
        // 如果有需要,重新排版
        [self.view layoutIfNeeded];
    }];
}
方式二:transform 方式

此方式大部分代码和上面是一样的,只不过这次我们不是修改constant了,而是通过transform方式修改输入框 键盘隐藏 和 键盘显示 时 两者y 的 差值(一定要断好句)

/**
 *  设置输入框
 */
- (void)setUpToolbar{
    BSPostWordToolbar *toolbar = [BSPostWordToolbar viewFromXib];
    toolbar.width = self.view.width;
    toolbar.y = BSScreenH - toolbar.height;
    
    // 添加通知监听键盘的弹出与隐藏
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];
    
    
    [self.view addSubview:toolbar];
    self.toolbar = toolbar;
}

- (void)dealloc{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

- (void)keyboardWillChangeFrame:(NSNotification *)notification{
    // 拿到键盘弹出时间
    double duration = [notification.userInfo[
UIKeyboardAnimationDurationUserInfoKey
] doubleValue];

    // 计算transform
    CGFloat keyboardY = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue].origin.y;
    CGFloat ty = keyboardY - BSScreenH;
    
    /**
     *  像这种移动后又回到原始位置的建议使用transform,因为transform可以直接清零回到原来的位置
     */
    [UIView animateWithDuration:duration animations:^{
        self.toolbar.transform = CGAffineTransformMakeTranslation(0, ty);
    }];
}

更多关于iOS学习开发的文章请登陆我的个人博客www.zhunjiee.com,欢迎前来参观学习

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/15969.html

相关文章

  • 原生js练习题---第五课

    摘要:那该如何是好原题给出思路是让事件负责标记按键就好了,而方向键的事件处理使用设个周期比较小的定时器持续监听,由于周期小,长按时就会立刻执行相应的事件处理,效果更加流畅。闪烁实现效果闪烁简单的一个定时器应用,用或都可以实现。 0x1模拟select控件 实现效果:5-01模拟select控件 比较简单的点击事件处理,也就处理点击选择框展示菜单、点击菜单选择、点击页面任意角落隐藏菜单这三件事...

    winterdawn 评论0 收藏0
  • 移动常见疑难问题

    摘要:是在系列事件发生后大约才触发的,混用和就会导致点透问题。获取视图原始高度方案二能较好地处理滚动的问题。禁止蒙层底下页面跟随滚动原因弹窗是常见的交互方式,而蒙层是弹窗必不可少的元素。 平时的开发过程中,经常会遇到一些疑难杂症,在这里记录一下常用的解决方案。 UI小姐姐要求的0.5px线 原因:不同手机的兼容不一样,尤其安卓 IOS的Safari表现是比较好的,safari是可以支持浮...

    klivitamJ 评论0 收藏0
  • 移动常见疑难问题

    摘要:是在系列事件发生后大约才触发的,混用和就会导致点透问题。获取视图原始高度方案二能较好地处理滚动的问题。禁止蒙层底下页面跟随滚动原因弹窗是常见的交互方式,而蒙层是弹窗必不可少的元素。 平时的开发过程中,经常会遇到一些疑难杂症,在这里记录一下常用的解决方案。 UI小姐姐要求的0.5px线 原因:不同手机的兼容不一样,尤其安卓 IOS的Safari表现是比较好的,safari是可以支持浮...

    KevinYan 评论0 收藏0
  • (2016-11-04完美解决)移动端iOS第三方输入法遮挡底部input及android键盘回落后

    摘要:问题概述问题移动端输入框键盘唤起后定位好的元素跟随页面滚动了起来属性失效了满屏任性横飞如下图问题有第三方输入法的机还会出现键盘弹出延迟,导致普通布局输入框等位置靠下的被键盘挡住如下图这个完成出来然后键盘再顶起完美解决方案在输入框获取焦点 问题概述 问题1:H5 web 移动端 输入框, 键盘唤起后fixed定位好的元素跟随页面滚动了起来… fixed属性失效了!满屏任性横飞, 如下图:...

    Simon 评论0 收藏0
  • (2016-11-04完美解决)移动端iOS第三方输入法遮挡底部input及android键盘回落后

    摘要:问题概述问题移动端输入框键盘唤起后定位好的元素跟随页面滚动了起来属性失效了满屏任性横飞如下图问题有第三方输入法的机还会出现键盘弹出延迟,导致普通布局输入框等位置靠下的被键盘挡住如下图这个完成出来然后键盘再顶起完美解决方案在输入框获取焦点 问题概述 问题1:H5 web 移动端 输入框, 键盘唤起后fixed定位好的元素跟随页面滚动了起来… fixed属性失效了!满屏任性横飞, 如下图:...

    lykops 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<