使用UITextField自定义UIScrollView自动滚动

亚历克斯·凯斯纳

我想在显示键盘时自定义滚动偏移量。正如您在GIF中所看到的,“文本字段”非常靠近键盘,我想拥有一个自定义位置。“名称”文本字段的距离应增加50px,而“贷款标题”文本字段应滚动到我的UIScrollView的底部。

屏幕录像

为了能够滚动通过键盘,我正在更改UIScrollView插图。奇怪的是,iOS会自动滚动到firstResponder文本字段(请参见GIF)。

override func viewDidLoad() {
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
}

@objc func keyboardWillShow(notification: NSNotification) {
    // get the Keyboard size
    let userInfo = notification.userInfo!
    let keyboardEndFrame = (userInfo[UIResponder.keyboardFrameEndUserInfoKey] as! NSValue).cgRectValue

    // update edge insets for scrollview
    self.mainScrollView.scrollIndicatorInsets.bottom = keyboardEndFrame.height - self.view.layoutMargins.bottom
    self.mainScrollView.contentInset.bottom = keyboardEndFrame.height - self.view.layoutMargins.bottom
}

我已经尝试使用该UITextfieldDelegate方法:textFieldDidBeginEditing(_ textField: UITextField)
我也尝试使用此处描述的Apple方法:https : //stackoverflow.com/a/28813720/7421005

这些方式都不能让我自定义自动滚动位置。实际上,它会覆盖所有尝试。有谁知道解决此问题的方法?

亚历克斯·凯斯纳

我自己找到了解决方案。问题是自动滚动(动画)干扰了我的scrollRectToVisible通话。将其置于异步状态可解决问题。

现在看起来与此类似:

override func viewDidLoad() {
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
}

@objc func keyboardWillShow(notification: NSNotification) {
    // get the Keyboard size
    let userInfo = notification.userInfo!
    let keyboardEndFrame = (userInfo[UIResponder.keyboardFrameEndUserInfoKey] as! NSValue).cgRectValue

    // update edge insets for scrollview
    self.mainScrollView.scrollIndicatorInsets.bottom = keyboardEndFrame.height - self.view.layoutMargins.bottom
    self.mainScrollView.contentInset.bottom = keyboardEndFrame.height - self.view.layoutMargins.bottom

    var frame = CGRect.zero

    if nameTextField.isFirstResponder {
        frame = CGRect(x: nameTextField.frame.origin.x, y: nameTextField.frame.origin.y + 50, width: nameTextField.frame.size.width, height: nameTextField.frame.size.height)
    }
    if titleTextField.isFirstResponder {
        frame = CGRect(x: titleTextField.frame.origin.x, y: titleTextField.frame.origin.y + titleShortcutsCollectionView.frame.height + 25, width: titleTextField.frame.size.width, height: titleTextField.frame.size.height)
    }

    DispatchQueue.main.async {
        self.mainScrollView.scrollRectToVisible(frame, animated: true)
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用自定义UIControl自动调整UIScrollView内容偏移

来自分类Dev

自定义UITableViewCell内的水平UIScrollView-使用IB故事板-不滚动

来自分类Dev

自定义UITableViewCell中的水平UIScrollView-使用IB故事板-不滚动

来自分类Dev

使用jQuery自定义滚动条自动滚动我的身体

来自分类Dev

使用按钮自定义滚动

来自分类Dev

使用ListView自定义滚动

来自分类Dev

自定义UITextField的SelectedTextColor

来自分类Dev

使用CALayer创建UITextField的自定义类

来自分类Dev

使用自定义样式在Swift中创建UITextField扩展

来自分类Dev

适用于UIScrollView的iOS自定义滚动条

来自分类Dev

使用Unity(容器抽象)定义自定义自动传真?

来自分类Dev

使用Unity(容器抽象)定义自定义自动传真?

来自分类Dev

创建具有自动完成和下拉功能的自定义UITextField组件

来自分类Dev

VBA使用UserForm变量自定义滚动条

来自分类Dev

如何使用标签栏自定义设计滚动视图?

来自分类Dev

使用 css 或 jquery 自定义滚动条 firefox

来自分类Dev

自定义uitableviewcell中的uiscrollview

来自分类Dev

MvvmCross UITextField自定义绑定

来自分类Dev

UITextField自定义图释(图标)

来自分类Dev

如何自定义UITextField的数字输入?

来自分类Dev

自定义UITextField,不带参数的init

来自分类Dev

MvvmCross UITextField自定义绑定

来自分类Dev

UITextField自定义图释(图标)

来自分类Dev

自定义UITextField,不带参数的init

来自分类Dev

UITextField的自定义输入视图的WindowLevel

来自分类Dev

如何自定义uitextfield外观

来自分类Dev

UITextField 自定义清除按钮

来自分类Dev

使用自定义绘画自动调整DataGridViewComboBoxCell的大小

来自分类Dev

使用自动映射器自定义解析

Related 相关文章

热门标签

归档