当键盘出现时,我应该如何正确设置 UITextView 的 contentInset

Posted

技术标签:

【中文标题】当键盘出现时,我应该如何正确设置 UITextView 的 contentInset【英文标题】:How should I correctly set contentInset for UITextView when Keyboard appears 【发布时间】:2015-09-15 03:15:45 【问题描述】:

我试图在键盘显示时更改UITextViewcontentInsets 属性,使其不会隐藏在键盘后面。我查看了有关此任务的一些问题,并尝试遵循批准或高度投票的答案,并尝试遵循 Apple 推荐的方法:

https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html#//apple_ref/doc/uid/TP40009542-CH5-SW7

我的代码目前如下,在ViewDidLoad()中:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillShow:", name: UIKeyboardWillShowNotification, object: nil)

选择器所指示的功能是:

func keyboardWillShow(notification : NSNotification)
    let info :NSDictionary = notification.userInfo! as NSDictionary;
    if let keyboardRect = info.objectForKey(UIKeyboardFrameEndUserInfoKey)
        var inset = commentsText.contentInset;
        inset.bottom = keyboardRect.size.height
        UIView.animateWithDuration(0.25, animations: 
            self.commentsText.contentInset = inset
        )
    

commentsTextUITextView的名字,我正在努力调整纯真。

我遇到的问题是,在尝试访问 keyboardRect.size.heigh 时,我遇到了一个致命错误,即尝试解开意外的 nil 值。我真的不确定如何解决这个问题,因为据我所知,我正在遵循公认的答案和文档(动画块是 Apple 文档的补充,但它来自公认的答案 How do I resize views when keyboard pops up using Auto Layout,所以我认为这可能不是问题的根源。

我也尝试过使用UIKeyboardDidShowNotificationUIKeyboardFrameBeginUserInfoKey,但是这些替换都没有改变错误。 Apple 的文档和有关该主题的大多数问题/答案都在 Objective-C 中,虽然我认为我出于我的目的正确地将它们“翻译”成 Swift,但我完全有可能在某个地方犯了错误,如果是这种情况,请让我知道我的错误是什么。

任何帮助/建议将不胜感激。

提前致谢。

附:我目前正在使用 Xcode 7 Beta 6

【问题讨论】:

【参考方案1】:

以下是如何从 NSNotification 中获取键盘矩形(CGRect):

let info = notification.userInfo!
let keyboardRect = (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue()

【讨论】:

顺便说一句,在 iOS 8 和 9 中不需要动画。 contentInset 中的更改将自动动画化。 但是您确实需要通过约束或其他 IIRC 来更改 UITextView 的大小 嘿@matt 你有自动动画的参考吗?我正在寻找禁用它,但没有发现任何有用的东西。

以上是关于当键盘出现时,我应该如何正确设置 UITextView 的 contentInset的主要内容,如果未能解决你的问题,请参考以下文章

在 UITextView 编辑时移动 UIView

当用户点击按钮时,它应该进入打字模式,即应该出现软件键盘

如何使用adjustResize设置隐藏键盘下方的BottomNavigationView

键盘出现时如何滚动 UIScrollView?

无法弄清楚如何正确使用 KeyboardAvoidingView

键盘出现时如何移动视图Y轴变化