2016-11-25 9 views
0

数日前にこれを投稿しましたが、うまくいくソリューションが見つからないようです。スクロール表示が使用されているときにオブジェクトを保持する

(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 
     } 
    } 
+1

は、なぜあなたはscrollviewを使用していますか?なぜボタンからスーパービューにボトム拘束を加えて、キーボード通知時にこれを変更するだけでいいのですか? –

答えて

0

。コードは次のようになります。

@IBOutlet weak var buttonBottomConstraint: NSLayoutConstraint! 
.... 

func keyboardWillShow(notification: NSNotification) { 

    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 
     if self.view.frame.origin.y == 0 { 
      self.buttonBottomConstraint.constant -= keyboardSize.height 
      self.view.layoutIfNeeded() 
     } 
    } 
} 

func keyboardWillHide(notification: NSNotification) { 
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 
     if self.view.frame.origin.y != 0 { 
      self.buttonBottomConstraint.constant += keyboardSize.height 
     } 
    } 
} 

制約は、このlijkeルックスます:

enter image description here

関連する問題