2016-02-28 73 views
1

我瞭解我發佈的問題已經討論了很多,但就我在SO搜索中找不到針對我的問題的解決方案。我發佈這個來獲得一些輸入。當鍵盤啓動時顯示文本字段

問題:

景觀層次:查看 - >滾動型 - >查看 - >文本字段

我已經實現了兩個屏幕與鋪設在頂部多個文本框滾動視圖可避免鍵盤在頁面底部遮擋文本框。我使用Apple提供的示例代碼稍作修改就實現了這一點。

  1. 訂閱UIKeyboardWillShowNotificationUIKeyboardWillHideNotification
  2. 當顯示鍵盤,從userInfo字典獲取鍵盤的高度,並設置適當的內容嵌入到移動鍵盤
  3. 當鍵盤被隱藏,將上面的文本框內容插入到UIEdgeInsetZero,以恢復正常大小

上面的實現工作完全正常,當有更多的文本域可以佔用整個屏幕(假設有10個文本字段,並且它們超出了滾動視圖的框架)。每當我點擊一個文本框時,它會按照預期移動到鍵盤上方,我也可以滾動頁面直到鍵盤框架上方最下方的文本框可見(鍵盤仍然彈起時)。

我的問題出現在屏幕上垂直居中的滾動視圖中只有兩個文本框。當我點擊一個文本框時,scrollview會得到一個與鍵盤高度相當的插圖,並且它按照預期在鍵盤之上移動,但是當我滾動屏幕時,我可以看到文本框下面有一個巨大的空白空間(由於附加插入)。

當頁面中只有一個或兩個文本框時,如何避免該空白區域?我是否需要編寫不同的邏輯來處理這種情況?任何幫助,將不勝感激。

下面是代碼:

override func viewDidLoad() { 
     super.viewDidLoad() 

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


    func keyboardWillShow(notification: NSNotification) { 
     if let userInfo = notification.userInfo { 
      let keyboardFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.CGRectValue() 
      if let kbFrame = keyboardFrame { 

       let inset = CGRectGetHeight(kbFrame) 
       scrollView.contentInset = UIEdgeInsetsMake(0, 0, inset, 0) 
       scrollView.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, inset, 0) 
      } 
     } 
    } 

    func keyboardWillHide(notfication: NSNotification) { 
     scrollView.contentInset = UIEdgeInsetsZero 
     scrollView.scrollIndicatorInsets = UIEdgeInsetsZero 
    } 
+0

http://stackoverflow.com/a/28813720/5097148 –

回答

0

有許多在那裏的解決方案,但我的首選解決方案是使用TPKeyboardAvoiding。要在這裏使用它,您只需在SB或代碼中將UIScrollView作爲TPKeyboardAvoidingScrollView的一個實例或子類,並且它應該關心其餘部分,不需要其他代碼!

+0

謝謝。我會看看解決方案,但我想自己做,並從這個過程中學習。我可以通過工具中的代碼,但任何解決方案來實現它? – TMDB

+0

你可以做到這一點,你不僅歡迎你,但它是一個我試圖做的失敗的房子。 – sschale

1

TPKeyboardAvoidingScrollView是好的,但最近我切換到IQKeyboardManager - >https://github.com/hackiftekhar/IQKeyboardManager

其高達您選擇,但我更喜歡IQKeyboardManager導致其容易

+0

你是否覺得它更好,或者只是你一次調用它而不必設置你想要使用它的類? – sschale

相關問題