【问题标题】:handling keyboard overlappingin swift快速处理键盘重叠
【发布时间】:2017-10-21 05:09:56
【问题描述】:

在没有 IQKeyboardManagerSwift 或 IHKeyboardAvoiding 等框架的情况下修复键盘重叠的最佳方法是什么?

【问题讨论】:

  • 有什么问题?是键盘出现并覆盖了文本字段吗?
  • 键盘出现并隐藏文本字段(重叠)
  • 为什么你不想使用 iqkeyboard。如果 pod 不工作,然后手动添加所需的类。其他方式需要很大的改变。
  • 我想使用 pod,但这些库无法正常工作,它们仍然隐藏文本字段 idk 为什么
  • 我发现处理键盘重叠问题的最佳方法是将所有视图嵌入静态表视图控制器\,系统会自动自动向上移动键盘。如果您不喜欢这种方式,请使用 IQKeyboardManager pod。

标签: ios swift xcode keyboard


【解决方案1】:

设置你的滚动视图底部布局约束,

这使得所有文本字段都可以通过滚动使用,您无需考虑其他设备和键盘高度差异。

@IBOutlet weak var mainScrollViewBottomConstraint: NSLayoutConstraint!

 open override func viewDidLoad() {
        super.viewDidLoad()
        let notificationCenter = NotificationCenter.default
        notificationCenter.addObserver(self, selector: #selector(keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)

         notificationCenter.addObserver(self, selector: #selector(keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
    }

    func keyboardWillShow(_ notification: Notification) {
        let userInfo = (notification as NSNotification).userInfo!
        let keyboardSize = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
        mainScrollViewBottomConstraint.constant = keyboardSize.height
    }

    func keyboardWillHide(_ notification: Notification) {
        mainScrollViewBottomConstraint.constant = 0
    }

编辑:我制作了一个关于我的解决方案的视频。 https://youtu.be/gS4AKcJAg3Y

【讨论】:

  • “设置滚动视图底部布局约束”是什么意思,我是否必须将此代码用于解决问题所需的所有控制器?
  • @Johnie,我制作了一个视频,你可以观看,你就会明白我的意思。
  • 这是 Swift 5 的过时答案
【解决方案2】:

最好的方法是,为您的视图设置一个顶部约束,并在单击 UITextfield 时使用约束为视图设置动画。

@IBOutlet var constraintViewTop: NSLayoutConstraint!

在“textFieldDidBeginEditing”委托中动画视图。

func textFieldDidBeginEditing(_ textField: UITextField) {
    switch textField {
    case yourTextfield:
        //This is the code for view up
        UIView.animate(withDuration: 0.45, animations: {
            self. constraintViewTop.constant = -172
        })
    default:
        //This the code for view down
        UIView.animate(withDuration: 0.45, animations: {
            self. constraintViewTop.constant = 0
        })
    }
}

【讨论】:

  • 这个解决方案并不健壮,由于静态高度值,它会在不同的设备上中断,尝试使用keyboardWillShow和keyboardWillHide并改用键盘高度。
【解决方案3】:

我找到了处理键盘重叠问题的最佳方法,只需在静态表格视图控制器中嵌入(实现)所有视图和文本字段,系统就会自动自动向上移动键盘。如果您不喜欢这种方式,请使用 IQKeyboardManager pod。

【讨论】:

  • IQKeyboardManager 非常好,如果您不介意依赖关系,我同意,但是关于 tableView 解决方案,想象一下如果我的场景将只包含一个 textField,那么仅实例化整个 tableView 不会有效一个文本字段。
  • “实例化整个 tableView”是什么意思?你的意思是它不会滚动?
  • 我的意思是,只为一个视图实现整个 tableView 成本很高
猜你喜欢
  • 1970-01-01
  • 2020-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
  • 2015-01-15
  • 2015-10-23
  • 1970-01-01
相关资源
最近更新 更多