UITextField、UITableview随键盘弹起而上移、滑动(swift)

1、业务场景

类似于QQ、微信的聊天框,当开始输入文字时我们会发现:

  • 输入框(UITextField)下边界紧贴键盘上边界
  • 消息界面(UITableView)最上面的几条聊天记录滑出视线

怎么做到的呢?

2、实现方法

最重要的一条是要拿到键盘的高度,可以这样实现:

  1. 先在ViewController中注册通知
	NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillAppear(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
  1. 通过notification对象拿到键盘高度
    @objc func keyboardWillAppear(notification: NSNotification) {
        let keyboardinfo = notification.userInfo![UIResponder.keyboardFrameEndUserInfoKey]
        let keyboardheight: CGFloat = (keyboardinfo as AnyObject).cgRectValue.size.height
        //如果输入框在安全区之上,要减去这部分的偏移
        print(keyboardheight - view.safeAreaInsets.bottom)
    }

Attention

不要用keyboardFrameBeginUserInfoKey,否则会返回两种高度,这跟键盘的prediction bar有关。

  1. 更新约束

    (1) UITextField可以通过updateConstraints更新边界约束

    (2) UITableView可以通过改变setContentOffset方法,一般情况下当键盘出现时,想让了聊天记录向上滑,只需要增加y坐标即可

  2. 当编辑完毕后隐藏键盘并重置约束

	//实现UITextFieldDelegate方法监听输入状态
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        /**
        //重置约束,与第三步相反即可
         */
        return true
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值