簡體   English   中英

鍵盤啟動時顯示文本字段

[英]Showing Textfield when Keyboard is up

我知道我發布的問題已經討論了很多,但是就我在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
    }

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

它由您選擇,但我更喜歡IQKeyboardManager使其易於使用

有很多解決方案,但是我的首選解決方案是使用TPKeyboardAvoiding 要在這里使用它,只需將您的UIScrollView TPKeyboardAvoidingScrollView為SB或代碼中TPKeyboardAvoidingScrollView的實例或子類,它就應該處理其余的事情,不需要其他代碼!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM