[swift] IQKeyboardManager를 사용해서 키보드가 나타날 때 뷰의 위치를 조절할 수 있나요?
IQKeyboardManager는 키보드 관련 이벤트를 자동으로 처리해주는 라이브러리입니다. 이 라이브러리를 사용하면 UITextField나 UITextView 등의 입력 필드를 사용할 때 키보드가 나타날 때 자동으로 뷰의 위치를 조절할 수 있습니다.
먼저, IQKeyboardManager 라이브러리를 프로젝트에 추가해야 합니다. 프로젝트의 Podfile에 다음과 같이 추가해주세요:
pod 'IQKeyboardManagerSwift'
그리고 터미널에서 pod install
명령어를 실행하여 라이브러리를 다운로드하고 설치합니다.
이제, AppDelegate.swift 파일에서 다음과 같이 IQKeyboardManager를 설정해줍니다:
import IQKeyboardManagerSwift
...
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
IQKeyboardManager.shared.enable = true
return true
}
위 코드는 앱이 실행될 때 IQKeyboardManager를 활성화합니다.
이제 UITextField나 UITextView 등에서 키보드가 나타날 때 뷰의 위치를 조절하려면, 해당 뷰 컨트롤러에서 IQKeyboardManager의 애니메이션 관련 메서드를 사용하면 됩니다. 다음은 예시 코드입니다:
import IQKeyboardManagerSwift
...
class ViewController: UIViewController {
@IBOutlet weak var textField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
IQKeyboardManager.shared.enable = true
IQKeyboardManager.shared.shouldResignOnTouchOutside = true
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil)
}
@objc func keyboardWillShow(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
self.view.frame.origin.y -= keyboardSize.height
}
}
@objc func keyboardWillHide(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
self.view.frame.origin.y += keyboardSize.height
}
}
}
위 코드에서는 키보드가 나타날 때 뷰의 origin.y 값을 키보드의 높이만큼 이동시키고, 키보드가 사라질 때는 원래 위치로 되돌리는 동작을 구현하였습니다.
위와 같이 IQKeyboardManager를 사용하여 키보드가 나타날 때 뷰의 위치를 조절할 수 있습니다. 이를 통해 사용자가 키보드를 열 때 뷰가 가려지는 문제를 해결할 수 있습니다.
더 자세한 정보는 IQKeyboardManager의 공식 문서를 참고하시기 바랍니다.