[英]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.