gpt4 book ai didi

iOS 键盘和文本字段

转载 作者:搜寻专家 更新时间:2023-10-31 22:59:22 24 4
gpt4 key购买 nike

晚上,我有一个带有多个 UITextfield 的应用程序,像往常一样,当我按下一个文本字段时,我遇到了键盘位置问题。

我知道我必须通过委托(delegate)和 textFieldDidBeginEditing func 来解决它,将 250 的文本字段向上移动,然后再向下移动。

但通常我用一个简单的布局来做到这一点,在这个布局中有几个嵌套的 stack views 我真的不知道如何解决这个问题。我读到我应该使用 scroll view,我试过了,但它搞砸了所有布局。尖端?我非常喜欢编码挑战,但是当涉及到布局方面的问题时,仇恨就会涌现,我的大脑就会卡住。

The Layout of the App

解决方案:

在自动布局中

1 在所有顶部添加一个屏幕大小的 View

2 向新 View 添加约束

  • Leading edge 等于 superview 的 leading edge。

  • 底边等于父 View 的底边。

  • 与父 View 等宽。

  • 与父 View 等高。

3 对 subview /堆栈 View 进行适当的约束调整

4 在 View Controller 上设置所有带委托(delegate)的文本字段

在代码中 - ViewController

class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var mainViewBottomConstraint: NSLayoutConstraint!
var activeField: UITextField?

override func viewDidLoad() {
super.viewDidLoad()

NotificationCenter.default.addObserver(self, selector: #selector(ViewController.keyboardWillShow(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.keyboardWillHide(notification:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)


}
//we are tracking the Field we are working on
func textFieldDidBeginEditing(_ textField: UITextField) {
activeField = textField
}

func textFieldDidEndEditing(_ textField: UITextField)
{
activeField = nil
}

func keyboardWillShow(notification: NSNotification) {
if let userInfoDict = notification.userInfo, let keyboardFrameValue = userInfoDict[UIKeyboardFrameEndUserInfoKey] as? NSValue {
let keyboardFrame = keyboardFrameValue.cgRectValue

//The view will scroll up only for the following textfield

if activeField == zipCodetext || activeField == cityText || activeField == streetAddresstext || activeField == stateText {

UIView.animate(withDuration: 0.8) {
self.mainViewBottomConstraint.constant = keyboardFrame.size.height
self.view.layoutIfNeeded()
}
}

}
}

func keyboardWillHide(notification: NSNotification) {
UIView.animate(withDuration: 0.8) {
self.mainViewBottomConstraint.constant = 0
self.view.layoutIfNeeded()
}
}
}

感谢@vacawama

最佳答案

尝试将整个布局放在屏幕大小的 View 中,然后在键盘出现时将该 View 向上移动适当的量。

拖出一个 UIView 并将其放在顶层 View 中。将其调整为屏幕大小。

设置 4 个约束:

  1. Leading edge 等于 superview 的 leading edge。
  2. 底边等于父 View 的底边。
  3. 与 superview 等宽。
  4. 与父 View 等高。

为底部约束创建一个@IBOutlet。当键盘出现时,设置 bottomConstraint.constant = 250 以向上移动 View 。将其设置回 0 以再次向下移动它。您可能需要为 constant 取一个负值,具体取决于约束中项目的顺序。


要为移动设置动画,请在 UIView.animateWithDuration block 中的 self.view 上调用 layoutIfNeeded:

bottomContraint.constant = 250
UIView.animateWithDuration(1.0) {
self.view.layoutIfNeeded()
}

关于iOS 键盘和文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39065022/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com