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
}
}
支持原创,版权所有