【问题标题】:Move UITextField/View up when keyboard appears, but only if TextFiel is hidden出现键盘时向上移动 TextField/View,但前提是 Text Field 隐藏
【发布时间】:2016-12-30 11:06:00
【问题描述】:

我用 Xcode 和 Swift 制作了一个 iOS 应用程序。 在一个 ViewController 中有一个带有多个 UITextField 的表单。 我的问题是,底部附近的文本字段在打开时隐藏在键盘后面。

我已经找到了一种解决方法,可以在键盘出现后立即向上移动整个视图。但这意味着,最顶层的 TextField 被隐藏了。

我已经花费数小时寻找可行的解决方案,但没有成功。

请问有人可以帮我吗?

编辑

我决定试试IQKeyboardManager library。

由于我不使用 CocoaPods,我尝试了“手动”方式。

我在 AppDelegate 的 didFinishLaunchingWithOptions 中添加了这行代码 (IQKeyboardManager.sharedManager().enable = true),并在 Xcode 的左侧栏中移动(拖放)了整个 IQKeyboardManagerSwift 文件夹。

但我得到:Use of unresolved identifier 'IQKeyboardManager'

我做错了什么?

【问题讨论】:

  • 我使用了这个solution 并且工作正常。

标签: ios swift keyboard uitextfield


【解决方案1】:

对于所有这些UITextField + 键盘问题,我强烈建议您使用IQKeyboardManager 库。它无需一行代码就可以解决问题。

如果你想自己做,你应该看看this answer

【讨论】:

  • 这个库我需要 CocoaPod 吗?
  • 你可以使用 Cocoapod 来集成这个库(这是最简单的方法)。但您也可以按照README 中的说明手动集成它
  • 我正在尝试手动版本。我在 AppDelegate 的 didFinishLaunchingWithOptions 中添加了这行代码 (IQKeyboardManager.sharedManager().enable = true),并在 Xcode 的左侧栏中移动(拖放)整个 IQKeyboardManagerSwift 文件夹。但我得到:Use of unresolved identifier 'IQKeyboardManager'。我做错了什么?
  • 伟大的发现!
【解决方案2】:

试试这个 ->

func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
if textField == nameTxtField {
    self.view.frame = CGRectMake(0, -50, self.view.frame.size.width, self.view.frame.size.height)
}
if textField == EmailTxtField {
    self.view.frame = CGRectMake(0, -100, self.view.frame.size.width, self.view.frame.size.height)
}
    return true
}

【讨论】:

    【解决方案3】:

    您应该考虑将文本字段放在滚动视图中,当键盘出现时,只需通过键盘高度调整滚动视图的高度。这将使整个滚动视图保持在屏幕上,并允许您滚动浏览文本字段。

    【讨论】:

      【解决方案4】:

      很遗憾,由于我的声誉,我无法发表评论,所以我在这里发表评论。 让我明白,只有当您要编辑一个 UITextField 时,您才想将视图向上移动,当您点击该字段时,它会被键盘覆盖,对吧?

      如果答案是肯定的,当键盘要显示时,检查谁是第一响应者,类似

      if bottomTextField.isFirstResponder() {
          view.frame.origin.y = getKeyboardHeight() * -1
      }
      

      由于您知道键盘将覆盖哪些文本字段,因此只有在其中一个正在编辑时,您才能向上滑动视图。 您可以从 UIKeyboardWillShowNotification 获取键盘高度。 如果您对这种方法感兴趣,请发表评论,我将编辑添加一些代码来完成整个事情

      【讨论】:

        【解决方案5】:

        您可以使用 UITableViewController 并免费获得您想要的行为。 只需在单元格中放置一个文本字段,它就会自动滚动文本字段,这样键盘就不会隐藏它。

        【讨论】:

          【解决方案6】:

          【讨论】:

          • 效果不佳 - 它似乎会干扰其他弹出窗口,例如添加 UI 更改(如自动完成字段)的弹出窗口
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-10-22
          • 1970-01-01
          • 2019-06-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多