UITextView--键盘遮挡输入框

UITextView是多行文本输入框,也是日常开发中的基础控件
UITextView与UITextField的区别就是前者支持多行文本输入,后者是单行的,但是实现大致是相同的

键盘把输入框遮住了
  • 刚开始看好像问题不大,但是如果输入的东西多了,输入的内容就会被键盘挡住看不到了

  • 在键盘弹起的时候frame在y轴方向的偏移量向上偏移

  • 在键盘收起的时候frame在y轴方向的偏移量改为0

  • 键盘弹起、收起可以通过代理方法或者事件监听完成,效果都是一样的

func textViewDidBeginEditing(_ textView: UITextView) {
        UIView.animate(withDuration: 0.4) {
            self.view.frame.origin.y = -30
        }
    }

    func textViewDidEndEditing(_ textView: UITextView) {
        UIView.animate(withDuration: 0.4) {
            self.view.frame.origin.y = 0
        }
    }
  • 这样子做键盘收起后整个frame整体都往上移动了,下面出现了黑色的框
  • 如果键盘收起self.view.frame.origin.y = 0这么写就会出现这样的效果,因为偏移量错了

解决方案

  • 为了解决这个问题,在键盘弹起之前先把正确的偏移量记录下来
  • 键盘收起之后,复原偏移量
func textViewDidBeginEditing(_ textView: UITextView) {
        offsetY = view.frame.origin.y
        UIView.animate(withDuration: 0.4) {
            self.view.frame.origin.y = -30
        }
    }

    func textViewDidEndEditing(_ textView: UITextView) {
        guard let offsetY = offsetY else { fatalError("offsetY is invaild") }
        UIView.animate(withDuration: 0.4) {
            self.view.frame.origin.y = offsetY
        }
    }



支持原创,版权所有

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容