keyboardGuide.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
keyboardGuide.topAnchor.constraint(equalTo: textView.bottomAnchor).isActive = true
keyboardHeight = keyboardGuide.heightAnchor.constraint(equalToConstant: view.safeAreaInsets.bottom)
NotificationCenter.default.addObserver(self, selector: #selector(respondToKeyboard),
name: UIResponder.keyboardWillShowNotification,
object: nil)
@objc func respondToKeyboard(notification: Notification) {
let info = notification.userInfo
if let endRect = info?[UIResponder.keyboardFrameEndUserInfoKey) as? CGRect {
var offset = view.bounds.size.height - endRect.origin.y
if offset == 0.0 {
offset = view.safeAreaInsets.bottom
}
let duration = info?[UIResponder.keyboardAnimationDurationUserInfoKey] as? TimeInterval ?? 2.0
UIView.animate(withDuration: duration, animations: {
self.keyboardHeight.constant = offset
self.view.layoutIfNeeded()
})
}
}
새로운 레이아웃 가이드를 활용하기
윗쪽 가장자리로 갔을 때와 멀어졌을 때 다른 동작을 수행
let awayFromTopConstrains = [
view.keyboardLayoutGuide.topAnchor.constraint(equalTo: editView.bottomAnchor).
]
view.keyboardLayoutGuide.setConstraints(awayFromTopConstraints, activeWhenAwayFrom: .top)
let nearTopConstraints = [
view.safeAreaLayoutGuide.bottomAnchor.constraint(equalTo: editView.bottomAnchor).
]
view.keyboardLayoutGuide.setConstraints(nearTopConstraints, activeWhenNearEdge: .top)
양쪽에서 멀어지면 변화
let awayFromSides = [
view.keyboardLayoutGuide.centerXAnchor.constraint(equalTo: editView.centerXAnchor).
imageView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
]
view.keyboardLayoutGuide.setConstraints(awayFromSides, activeWhenAwayFrom: [.leading, .trailing])
let nearTrailingConstraint = [
view.keyboardLayoutGuide.trailingAnchor.constraint(equalTo: editView.trailingAnchor),
imageView.leadingAnchor.constraint(
equalToSystemSpacingAfter: view.safeAreaLayoutGuide.leadingAnchor, multiplier: 1.0)
]
view.keyboardLayoutGuide.setConstraints(nearTrailingConstraints, activeWhenNearEdge: .trailing)
let nearLeadingConstraints = [
editView.leadingAnchor.constraint(equalTo: view.keyboardLayoutGuide.leadingAnchor),
view.safeAreaLayoutGuide.trailingAnchor.constraint(
equalToSystemSpacingAfter: imageView.trailingAnchor, multiplier: 1.0)
]
view.keyboardLayoutGuide.setConstraints(nearLeadingConstraints. activeWhenNearEdge: .leading)
away와 near
키보드 타입
멀티 태스킹에서의 floating 키보드