数日前にこれを投稿しましたが、うまくいくソリューションが見つからないようです。スクロール表示が使用されているときにオブジェクトを保持する
(1)画面全体のレイアウトです。ボタンはスクロールビューの内側にあるので、ボタンが表示されたらユーザービューにプッシュされます。その後、最初のレスポンダーが辞任したら元に戻ります。 I テキストフィールドをまったく移動しないようにします。私はそれらを置いた場所にそれらを保管したい。ボタンだけが私が移動したいものです。
(1)https://i.stack.imgur.com/O8iJy.png
(2)それはキーボードが表示されたときにどのように見えるかの結果。テキストフィールドを非表示にしてしまいます。 @IBOutlet弱いのvar ScrollView:UIScrollViewのを
(2)https://i.stack.imgur.com/VDhdI.png
をこれは私が使用していたコードです!あなたは、ビューの一番下にスクロールするボタンの下のためNSLayoutConstraintを作成し、この制約で動作する必要が
keyboardWillShow
で代わりに
self.view.frame.origin.y -= keyboardSize.height
の
@IBOutlet weak var TextField: UITextField!
@IBOutlet weak var testButton: UIButton!
@IBOutlet weak var testView: UIView!
func closeKeyboard(){
self.view.endEditing(true)
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
closeKeyboard()
}
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(scrollviewtest.keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(scrollviewtest.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
}
}
}
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
}
}
は、なぜあなたはscrollviewを使用していますか?なぜボタンからスーパービューにボトム拘束を加えて、キーボード通知時にこれを変更するだけでいいのですか? –