SWIFT Keyboard перекрывает содержимое - PullRequest
0 голосов
/ 03 июля 2018

В моем loginViewController есть textField и кнопка для поиска. Я хочу убедиться, что при вводе текста в textField мой интерфейс не перекрывается клавиатурой, а прокручивается до размеров этой клавиатуры и имеется доступ ко всем элементам. Для этого я написал этот код:

override func viewDidLoad() {
        super.viewDidLoad()

        NotificationCenter.default.addObserver(self, selector: #selector(kbDidShow), name: NSNotification.Name.UIKeyboardDidShow, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(kbDidHide), name: NSNotification.Name.UIKeyboardDidHide, object: nil)
    }

    @objc func kbDidShow(notification: Notification) {
        guard let userInfo = notification.userInfo else { return }
        let kdFrameSize = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
        (self.view as! UIScrollView).contentSize = CGSize(width: self.view.bounds.size.width, height: self.view.bounds.size.height + kdFrameSize.height)
        (self.view as! UIScrollView).scrollIndicatorInsets = UIEdgeInsets(top: 0, left: 0, bottom: kdFrameSize.height, right: 0)
    }

    @objc func kbDidHide() {
        (self.view as! UIScrollView).contentSize = CGSize(width: self.view.bounds.size.width, height: self.view.bounds.size.height)
    }

Когда я запускаю приложение, у меня вид сбоку на полосу прокрутки, но сам интерфейс не прокручивается. В чем может быть проблема?

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Попробуйте использовать IQKeyboardManager, это сделает вашу работу автоматически Ссылка - https://github.com/hackiftekhar/IQKeyboardManager

Вам просто нужно добавить эту строку в AppDelegate Все текстовые поля будут корректироваться автоматически при каждом просмотре.

IQKeyboardManager.sharedManager().enable = true
0 голосов
/ 03 июля 2018

Измените смещение содержимого вместо установки contentSize.

 @objc func kbDidShow(notification: Notification) {
    guard let userInfo = notification.userInfo else { return }
    let kdFrameSize = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
    (self.view as! UIScrollView).contentOffset.y +=  kdFrameSize.size.height
    (self.view as! UIScrollView).scrollIndicatorInsets = UIEdgeInsets(top: 0, left: 0, bottom: kdFrameSize.height, right: 0)
}
...