UITextView键盘遮挡内容

如果我们的 UITextView 几乎占满了整个屏幕,那么当键盘出现的时候就会遮挡位于底部的内容。通常,解决方案有两种:

  • 当键盘出现时,在文字的底部流出足够的空行,以显示键盘
  • 当键盘出现时,压缩 textView 的高度以容纳底部的键盘

第一种方式受到文字大小的限制,而且需要额外的空间,还有可能找不到光标的位置。所以我们介绍相对来讲更为精髓的第二种方式:

第一步:添加委托

使 UITextView 所在的 UIViewController 遵从 UITextViewDelegate 协议。虽然用 extension 的方法更为推荐,这里为了直观直接在类名后边设置。

    class MyViewController: UIViewController, UITextViewDelegate {
    }

为 textView 指定委托为当前的 UIViewController:

textView.delegate = self

第二步:实现协议中的监听方法

键盘的高度是 216,所以把 textView 的高度减去216。

当开始进行编辑的时候,textViewDidBeginEditing() 方法会被执行。

    func textViewDidBeginEditing(textView: UITextView) {
        // 获取压缩后的高度
        let h = view.frame.height - 216
        // 定义一个新的矩形,具有压缩后的高度
        let rect = CGRect(origin: textView.frame.origin, size: CGSize(width:                        textView.frame.width, height: h))
        // 赋值给 textView
        textView.frame = rect
    }

下面的代码让 textView 在滚动的时候隐藏,并且恢复 textView 原来的高度。scrollViewWillBeginDragging() 方法会在 textView 刚被滑动且手没离开的时候执行。

    func scrollViewWillBeginDragging(scrollView: UIScrollView) {
        textView.resignFirstResponder()
        textView.frame = view.frame
    }

以上代码中,textView 的 resignFirstResponder() 方法会使 textView 丧失第一响应者的身份,从而不具有键盘的使用权。

如此这般,便可以防止键盘遮挡内容了。

你可能感兴趣的:(UITextView键盘遮挡内容)