Курс 12 урок 5. Клавиатура


#1

В 5 уроке мы пишем код который позволяет контенту, при появлении клавиатуры, подниматься вверх.
вот собственно говоря код

 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 kbFrameSize = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
    
    (self.view as! UIScrollView).contentSize = CGSize(width: self.view.bounds.size.width, height: self.view.bounds.size.height + kbFrameSize.height)
    (self.view as! UIScrollView).scrollIndicatorInsets = UIEdgeInsets(top: 0, left: 0, bottom: kbFrameSize.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

Никто не знает?)))))


#3

use:
(self.view as! UIScrollView).contentOffset


#4

Так как сделать что бы все заработало?(
Скачал проект Ивана, там видимо прошлая версия Xcode. Разница лишь в том, что у него нет @objc перед функцией. И у него все работает. А я не могу сделать в своем проекте без @objc, так как Xcode ругается. И почему его проект работает без @objc, а мой нет? от чего зависит этот синтаксис? от версии Xcode?


#5

От версии свифта в 4 нужно писать objc


#6

Да, все верно. Но почему в Swift4 с objc не работает, а тот же самый код в Swift 3 без objc работает. Как-то поднять контент в Swift 4?


#7

Скиньте свой проект.


#8

#9

У вас там обычный вью вместо скроллвью и хоть вы ему указали класс UIScrollView ведет он себя не так как должен, перетащите нормальный скроллвью и всё будет работать как задумано)

Проект здесь https://yadi.sk/d/VSICtY8J3RLMG2


#10

Спасибо большое!!! разобрался


#11

просто хотелось бы отметить, что Иван в своем видеоуроке тоже просто меняет View на ScrollView и говорит, что так как скролвью является подклассом класса UIView то никаких ошибок и проблем не возникает. Выходит это не так


#12

Иван прав но не совсем, в IB это разные объекты и когда на них добавляешь вью ведут они себя по разному.


#13

Тогда не пойму почему у него все заработало))) либо где то за кадром было сделано и не показано. Лично я как ученик всю голову сломал))) Ну да ладно. Главное истина известна) спасибо Вам)


#14

Видимо раньше это работало, я так никогда не делал)