代码之家  ›  专栏  ›  技术社区  ›  Tar

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

  •  2
  • Tar  · 技术社区  · 10 年前

    我正在尝试更改 contentInsets 的属性 UITextView 当他们显示键盘时,这样它就不会隐藏在键盘后面。我已经研究了许多关于这项任务的问题,并尝试了遵循经过批准或高度投票的答案,并且尝试了遵循苹果推荐的方法:

    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
            })
        }
    }
    

    commentsText 是的名称 UI文本视图 我正在努力调整自己的清白。

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

    我还尝试使用 UIKeyboardDidShowNotification 以及使用 UIKeyboardFrameBeginUserInfoKey ,但这些替换都没有改变错误。 来自苹果的文档和关于这个主题的大多数问题/答案都是Objective-C格式的,虽然我认为出于我的目的,我正确地将它们“翻译”成了Swift,但完全有可能我在某个地方犯了错误,如果是这样的话,请告诉我我的错误是什么。

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

    提前感谢。

    注:我目前在Xcode 7 Beta 6工作

    1 回复  |  直到 9 年前
        1
  •  1
  •   matt    10 年前

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

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