最近在項目中經常用到UITableView中的cell中帶有UITextField或UITextView的情況,然後在這種場景下,當我們點擊屏幕較下方的cell進行編輯時,這時候鍵盤彈出來會出現遮擋待輸入的cell,導致我們無法很方便地查看到我們輸入的內容,這樣的體驗是非常不好的。這個問題在之前我們 ...
最近在項目中經常用到UITableView中的cell中帶有UITextField或UITextView的情況,然後在這種場景下,當我們點擊屏幕較下方的cell進行編輯時,這時候鍵盤彈出來會出現遮擋待輸入的cell,導致我們無法很方便地查看到我們輸入的內容,這樣的體驗是非常不好的。這個問題在之前我們的隨筆iOS學習——鍵盤彈出遮擋輸入框問題解決方案中也有講過對應的解決方案,但是該方案在最近的應用中還有點小問題,我們在這裡重新進行處理好。
一 主控制器為UITableViewController或其子類
首先,有一個很簡單的解決方案,就是將我們的控制器換成UITableViewController或其子類,UITableViewController中的cell當有鍵盤彈出的時候表單整體會自動進行上移,我們需要編輯的區域正好可以在鍵盤的上方,這樣我們正好也可以看到我們編輯的內容,方便我們進行修改和調整具體內容。
但是,如果我們的整體佈局並不是只有一個UITableView,或者我們在項目中需要用到MBProgressHUD框架時,我們可能就不能直接將我們的控制器設置成UITableViewController或其子類,因為MBProgressHUD框架在UITableViewController和UICollectionViewController中顯示會存在一些bug,在GitHub中的MBProgressHUD框架官方文檔中就有提到要避免將HUD添加到具有複雜視圖層次結構的某些UIKit視圖(如UITableView或UICollectionView),UITableViewController和UICollectionViewController中的self.view實際上就是對應的UITableView或UICollectionView,所以會出現一些莫名其妙的bug,顯示不出來或者顯示的位置不對。
原文:You can add the HUD on any view or window. It is however a good idea to avoid adding the HUD to certain UIKit views with complex view hierarchies - like UITableView or UICollectionView. Those can mutate their subviews in unexpected ways and thereby break HUD display.
翻譯:你可以在任何視圖或視窗上添加HUD。 然而,避免將HUD添加到具有複雜視圖層次結構的某些UIKit視圖(如UITableView或UICollectionView)是一個好主意。 這可能以意想不到的方式改變他們的subviews,從而破壞HUD顯示。
二 主控制器為UIViewController或其子類
其實最開始我就是用的UITableViewController,結果要提示的要提示的tips總是顯示不設定的位置上,後來才得以發現的這個bug,我也很無奈