【发布时间】:2020-02-05 02:01:46
【问题描述】:
每当我的根视图控制器(导航控制器)推送到我的第二个 VC(我们称之为 VC2)时,所有 VC2 的子视图:按钮、标签和文本字段都会向下移动,即使我已经对其设置了约束。此外,每当我在编辑文本字段后关闭键盘时,视图都会返回到约束设置它的预期位置,并在视图底部留下一个黑色空间。这是我的 VC2 代码:
override func viewDidLoad() {
super.viewDidLoad()
view.layer.backgroundColor = UIColor(named: const.white)?.cgColor
nameField.delegate = self
emailField.delegate = self
passField.delegate = self
setUpTitles()
setUpTextFields()
setUpButton()
addPaddingAndBorder(to: nameField)
addPaddingAndBorder(to: emailField)
addPaddingAndBorder(to: passField)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChangeView(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardIsDone(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChangeView(notification:)), name: UIResponder.keyboardWillChangeFrameNotification, object: nil)
let tap = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard(_:)))
self.view.addGestureRecognizer(tap)
}
deinit {
NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil)
NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillChangeFrameNotification, object: nil)
}
@objc func keyboardWillChangeView(notification: Notification){
view.frame.origin.y = -150 //This is temporary
}
@objc func keyboardIsDone(notification: Notification){
view.frame.origin.y = 0
}
@objc func dismissKeyboard(_: UITapGestureRecognizer){ //Tapping outside the keyboard
nameField.resignFirstResponder()
emailField.resignFirstResponder()
passField.resignFirstResponder()
}
//Executed when hitting return key
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
nameField.resignFirstResponder()
emailField.resignFirstResponder()
passField.resignFirstResponder()
view.frame.origin.y = 0
return true
}
之前:
之后:
【问题讨论】:
-
(UI 以编程方式构建)
-
可以加截图吗?
-
@ParthTamane 它不会让我
-
Imgur 链接怎么样?
-
如果您添加了约束,请尝试此代码 -> self.view.layoutIfNeeded() 如果您设置了框架并觉得这是问题所在。尝试将框架代码放入此 -> DispatchQueue.main.asyncAfter(deadline: .now()+0.2) { }