@@ -38,6 +38,11 @@ class LayoutDesignerViewController: UIViewController, ViewModelBased, NibBased {
38
38
super. viewDidLoad ( )
39
39
configureViews ( )
40
40
setOptionsList ( )
41
+ registerKeyboardNotifications ( )
42
+ }
43
+
44
+ deinit {
45
+ NotificationCenter . default. removeObserver ( self )
41
46
}
42
47
43
48
@@ -132,6 +137,27 @@ class LayoutDesignerViewController: UIViewController, ViewModelBased, NibBased {
132
137
optionsTableView. optionViewModels = viewModel. optionViewModels
133
138
}
134
139
140
+ private func registerKeyboardNotifications( ) {
141
+ let notificationCenter = NotificationCenter . default
142
+ notificationCenter. addObserver ( self , selector: #selector( adjustForKeyboard) , name: UIResponder . keyboardWillHideNotification, object: nil )
143
+ notificationCenter. addObserver ( self , selector: #selector( adjustForKeyboard) , name: UIResponder . keyboardWillChangeFrameNotification, object: nil )
144
+ }
145
+
146
+ @objc private func adjustForKeyboard( notification: Notification ) {
147
+ guard let keyboardValue = notification. userInfo ? [ UIResponder . keyboardFrameEndUserInfoKey] as? NSValue else { return }
148
+
149
+ let keyboardScreenEndFrame = keyboardValue. cgRectValue
150
+ let keyboardViewEndFrame = view. convert ( keyboardScreenEndFrame, from: view. window)
151
+ var contentInset = optionsTableView. contentInset
152
+
153
+ if keyboardViewEndFrame. minY < optionsTableView. frame. maxY {
154
+ contentInset. bottom = optionsTableView. frame. maxY - keyboardViewEndFrame. minY - 8
155
+ } else {
156
+ contentInset. bottom = 8
157
+ }
158
+ optionsTableView. contentInset = contentInset
159
+ }
160
+
135
161
}
136
162
137
163
0 commit comments