Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 当点击我的文本字段或使用键盘使用NS通知时,我的视图不断向上移动_Swift_Uitextfield_Uistackview_Nsnotifications - Fatal编程技术网

Swift 当点击我的文本字段或使用键盘使用NS通知时,我的视图不断向上移动

Swift 当点击我的文本字段或使用键盘使用NS通知时,我的视图不断向上移动,swift,uitextfield,uistackview,nsnotifications,Swift,Uitextfield,Uistackview,Nsnotifications,我有一个堆栈视图,里面有一些texField和一个按钮,这是用于登录页面的 我在视图底部还有一个按钮,用于显示另一个视图控制器,该按钮工作正常 我已经设置了一个点击手势识别器,如果你点击视图上的任何地方,键盘就会关闭,视图会回到原来的约束状态,这也可以正常工作 我已经设置了NS通知,在我的功能键盘上将显示,当我点击文本字段时,视图将按我所希望的向上移动 我的问题是,当我点击另一个文本字段或者我开始键入视图再次上移时,我不知道这是为什么 似乎出于某种原因,每次我点击不同的文本字段或使用键盘时,都会

我有一个堆栈视图,里面有一些texField和一个按钮,这是用于登录页面的

我在视图底部还有一个按钮,用于显示另一个视图控制器,该按钮工作正常

我已经设置了一个点击手势识别器,如果你点击视图上的任何地方,键盘就会关闭,视图会回到原来的约束状态,这也可以正常工作

我已经设置了NS通知,在我的功能键盘上将显示,当我点击文本字段时,视图将按我所希望的向上移动

我的问题是,当我点击另一个文本字段或者我开始键入视图再次上移时,我不知道这是为什么

似乎出于某种原因,每次我点击不同的文本字段或使用键盘时,都会调用该函数,我不明白为什么会发生这种情况 任何帮助都将不胜感激,因为我是新手

    view.addSubview(alreadyHaveAccountButton)
    alreadyHaveAccountButton.anchor(top: nil, left: view.leftAnchor, bottom: view.bottomAnchor, right: view.rightAnchor, paddingTop: 0, paddingLeft: 0, paddingBottom: 5, paddingRight: 0, width: 0, height: 60)



    let stack = UIStackView(arrangedSubviews: [emailTextfield,passwordTextfield,fullNameTextfield,signUpButton])
    stack.axis = .vertical
    stack.spacing = 20
    stack.distribution = .fillEqually

    view.addSubview(stack)
    stack.anchor(top: nil, left: view.leftAnchor, bottom: alreadyHaveAccountButton.topAnchor, right:
        view.rightAnchor, paddingTop: 0, paddingLeft: 20, paddingBottom: 50, paddingRight: 20, width: 0, height: 0)

    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIWindow.keyboardWillShowNotification, object: nil)

    NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide), name: UIWindow.keyboardWillHideNotification, object: nil)


@objc func keyboardWillShow(notification: NSNotification) {

    let notification = notification.userInfo
    let keyboardFrame = notification?[UIResponder.keyboardFrameEndUserInfoKey] as! NSValue
    let keyboardFrameSize = keyboardFrame.cgRectValue

    view.frame.origin.y -= keyboardFrameSize.height
}


@objc func keyboardWillHide(notification: NSNotification) {
    let notification = notification.userInfo
    let keyboardFrame = notification?[UIResponder.keyboardFrameEndUserInfoKey] as! NSValue
    let keyboardFrameSize = keyboardFrame.cgRectValue

    view.frame.origin.y += keyboardFrameSize.height

}

这是因为你只是一遍又一遍地说
view.frame.origin.y-=keyboardFrameSize.height
。因此,您不断地向上移动视图。你完全没有考虑键盘在哪里,你在哪里(即文本字段在哪里)。是的,我理解你的意思,但我如何确保当我点击另一个文本字段时它不会再次向上移动,我看不出它是如何被再次调用的,因为键盘已经显示了如果你看了一些数字,你被调用了多少次都无关紧要,因为如果你已经被调用了,你就不会向上移动。至于它为什么被再次调用,也许这是因为你点击一个文本字段,你的点击手势识别器会关闭键盘,而文本字段又会把它带回来。我完全同意这是没有意义的,视图已经向上移动,为什么每次我点击文本字段时它都会向上移动?我理解你的意思,是的,你的权利是不应该这样做