【发布时间】:2017-12-02 17:30:39
【问题描述】:
我会尽可能快。我有一个高度为 0 的容器的主视图,每当启用键盘时,我都会将容器设置为与键盘相同的高度,并且我有一个按钮和一个电子邮件字段,并且我已经为这个容器设置了约束,基本上将元素向上推。我已将键盘设置为在加载视图时启用,并且它在主视图中正常工作,但只要我按下按钮转到下一个视图,键盘就会打开,但按钮和电子邮件字段留在键盘后面因为约束不起作用,但是当我按下主页按钮并关闭应用程序(不是从后台)并重新打开它时,约束正常工作。这只发生在我将导航控制器嵌入到主视图中时,否则它可以完美地工作。有什么想法吗?
我在两个视图上都有完全相同的代码。 Ps:抱歉,帖子太长了,我不知道如何解释。
@IBOutlet weak var emailTF: UITextField!
@IBOutlet weak var bottomHeight: NSLayoutConstraint!`
override func viewWillAppear(_ animated: Bool)
{
super.viewWillAppear(animated)
NotificationCenter.default.addObserver(
self,
selector: #selector(keyboardWillShow),
name: NSNotification.Name.UIKeyboardWillShow,
object: nil
)
// Show keyboard by default
emailTF.becomeFirstResponder()
}
@objc func keyboardWillShow(_ notification: Notification)
{
if let userInfo = notification.userInfo
{
if let keyboardSize = (userInfo[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue
{
bottomHeight.constant = keyboardSize.height
view.setNeedsLayout()
}
}
}
更新:我发现了部分问题。 加载第二个视图时,我无法获取键盘高度,我将第二个视图代码从“viewWillAppear”更改为“viewDidAppear”,使容器与键盘高度相同,但还有另一个问题。当我加载第一个视图时,我得到的键盘高度为 271(这是正确的),当我移动到第二个视图时,由于某种原因,键盘高度为 226,使 textField 移动 45。当我按下后退按钮从第二个视图返回到第一个视图,键盘高度为 226。当我按下主页按钮并重新打开应用程序时,无论我是哪个屏幕,我得到的键盘高度为 271,这是正确的高度.我做错了什么?
更新 2:已解决!
因为我的代码只能在没有导航控制器的情况下工作,所以我感觉它与导航控制器的快速动画和过渡有关,并且它阻止了在加载之前读取代码,所以我尝试编写这一行代码
emailTF.resignFirstResponder() 我的按钮操作,它起作用了!所以基本上我必须先关闭键盘,然后再将其加载到下一个视图中。我希望我能帮助一些遇到同样问题的用户。
【问题讨论】:
标签: ios swift keyboard constraints navigationcontroller