SOにはいくつかの類似の質問がありますが、以下の問題は解決しません。キーボードが表示されたときにビューを表示し、スクロールビューに表示します。 Swift 3
私は電子メールとパスワードのための2つのtextFieldsだけで簡単なログイン表示に取り組んでいます。 最高のUXは、ユーザーがtextFieldの1つをタップし、キーボードがポップインし、ビューが上に移動してscrollViewになるときです。 このようにして、ユーザーは画面上に他のどのUI要素が表示されているかを引き続き把握できます。 また、スワイプでキーボードを非表示にする必要があります。
class SignInVC: UIViewController, UITextFieldDelegate {
@IBOutlet weak var pwdField: UITextField!
@IBOutlet weak var emailField: UITextField!
@IBOutlet weak var scrollView: UIScrollView!
var keyboardDismissTapGesture: UIGestureRecognizer?
func dismissKeyboard(sender: AnyObject) {
pwdField?.resignFirstResponder()
emailField?.resignFirstResponder()
}
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(_ animated: Bool) {
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}
func keyboardWillShow(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
if self.view.frame.origin.y == 0{
self.view.frame.origin.y -= keyboardSize.height
}
}
if keyboardDismissTapGesture == nil
{
keyboardDismissTapGesture = UITapGestureRecognizer(target: self,
action: #selector(self.dismissKeyboard))
self.view.addGestureRecognizer(keyboardDismissTapGesture!)
}
}
func keyboardWillHide(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
if self.view.frame.origin.y != 0{
self.view.frame.origin.y += keyboardSize.height
}
}
if keyboardDismissTapGesture != nil
{
self.view.removeGestureRecognizer(keyboardDismissTapGesture!)
keyboardDismissTapGesture = nil
}
}
override func viewWillDisappear(_ animated: Bool) {
NotificationCenter.default.removeObserver(self)
super.viewWillDisappear(animated)
}
私は周りを再生しようとしていたscrollView.contentSize
もしようと:scrollViewせずにビューを構築し、resignFirstResponderによって、キーボードを閉じ
私ができた(Instagramのや他の大きな男の子が、これは実装されています)その起源を移動: scrollView.frame.origin.y -= keyboardSize.height
またはそのcontentSize: scrollView.contentSize = CGSize(width: self.view.frame.width, height: self.view.frame.height - keyboardSize.height)
しかし何も働かなかった。
キーボードのスワイプダウン機能に関して、scrollViewの属性インスペクタで、「キーボード」プロパティを「対話的に解除」に変更できるという情報がありました。 動作しませんでした。
はあなたのコードをテストするために空のプロジェクトを開始行くとき
//はscrollviewをリセットする表示されたときにscrollviewのコンテンツのサイズを調整します。ビューは動かなかった。キーボードが隠れていませんでした。 –