[英]How should I correctly set contentInset for UITextView when Keyboard appears
我试图在显示键盘时更改UITextView
的contentInsets
属性,以使其不会隐藏在键盘后面。 我查看了有关此任务的许多问题,并尝试遵循已批准或投票表决很高的答案,并尝试遵循Apple推荐的方法:
我的代码目前在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
是我要调整其纯真性的UITextView
的名称。
我遇到的问题是,当尝试访问keyboardRect.size.heigh
我遇到致命错误,即试图解开意外的nil值。 我真的不确定如何解决此问题,因为据我所知,我正在遵循公认的答案和说明文件(动画块是Apple文档的补充,但这是来自公认的答案,“ 如何在键盘操作时调整视图大小)使用“自动布局”弹出 ,所以我认为这可能不是问题的根源。
我也尝试过使用UIKeyboardDidShowNotification
以及UIKeyboardFrameBeginUserInfoKey
,但是这些替换都没有改变错误。 Apple的文档以及有关此主题的大多数问题/答案都在Objective-C中,尽管我认为出于我的目的将它们正确地“翻译”成了Swift,但如果是这种情况,我很可能在某个地方犯了一个错误。让我知道我的错误是什么。
任何帮助/建议,将不胜感激。
提前致谢。
PS我目前在Xcode 7 Beta 6中工作
这是从NSNotification中获取键盘rect(CGRect)的方法:
let info = notification.userInfo!
let keyboardRect = (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.