import UIKit
import PlaygroundSupport
class ViewController: UIViewController {
private var scrollView: UIScrollView!
private var textField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
scrollView = UIScrollView()
scrollView.backgroundColor = .gray
scrollView.alwaysBounceVertical = true
scrollView.keyboardDismissMode = .interactive
view.addSubview(scrollView)
scrollView.translatesAutoresizingMaskIntoConstraints = false
scrollView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
textField = UITextField()
textField.backgroundColor = .white
textField.delegate = self
scrollView.addSubview(textField)
textField.translatesAutoresizingMaskIntoConstraints = false
textField.topAnchor.constraint(equalTo: scrollView.topAnchor, constant: view.bounds.height - 100).isActive = true
textField.widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true
NotificationCenter.default.addObserver(self,
selector: #selector(keyboardWillShow),
name: .UIKeyboardWillShow,
object: nil)
NotificationCenter.default.addObserver(self,
selector: #selector(keyboardWillHide),
name: .UIKeyboardWillHide,
object: nil)
}
@objc private func keyboardWillShow(notification: Notification) {
guard let keyboardFrame = notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? CGRect else { return }
let offset = textField.frame.maxY - keyboardFrame.minY
if offset > 0 {
scrollView.contentOffset.y = offset
}
}
@objc private func keyboardWillHide(notification: Notification) {
scrollView.contentOffset.y = -scrollView.safeAreaInsets.top
}
}
extension ViewController: UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
let viewController = ViewController()
let window = UIWindow(frame: CGRect(x: 0, y: 0, width: 768, height: 1024))
window.rootViewController = viewController
window.makeKeyAndVisible()
PlaygroundPage.current.needsIndefiniteExecution = true
PlaygroundPage.current.liveView = window
More than 5 years have passed since last update.
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme
List of users who liked
32