gpt4 book ai didi

ios - 出现键盘时,UIScrollView 无法正确移动 View

转载 作者:行者123 更新时间:2023-11-29 01:45:47 26 4
gpt4 key购买 nike

我有一个 View Controller ,其 4 个侧面均固定有 UIScrollView。然后是一个 UIView ,其所有 4 个边都固定到 ScrollView ,并添加了等宽和等高约束。

在此 View 内,有两个容器 View 。这两个容器 View 嵌入了两个独立的 UITableViewController。我没有收到自动布局错误或警告。

enter image description here

这是它运行时的样子。

enter image description here enter image description here

在底部表格 View 中,一个单元格(第一部分的中间一个)有一个 UITextField,底部单元格有一个 UITextView。很明显,当键盘出现时,这些字段会被遮挡。

所以我想做的是当键盘出现时移动包含两个容器 View 的整个 View 。这就是为什么我将它嵌入到 ScrollView 中。我使用此代码来监视键盘显示/隐藏并相应地设置 ScrollView 的内容插入。

class ViewController: UIViewController {

@IBOutlet weak var scrollView: UIScrollView!

override func viewDidLoad() {
super.viewDidLoad()

NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name: UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name: UIKeyboardWillHideNotification, object: nil)
}

deinit {
NSNotificationCenter.defaultCenter().removeObserver(self)
}

func keyboardWillShow(notification: NSNotification) {
adjustInsetForKeyboard(true, notification: notification)
}

func keyboardWillHide(notification: NSNotification) {
adjustInsetForKeyboard(false, notification: notification)
}

func adjustInsetForKeyboard(show: Bool, notification: NSNotification) {
let userInfo = notification.userInfo ?? [:]
let keybaordFrame = (userInfo[UIKeyboardFrameBeginUserInfoKey] as! NSValue).CGRectValue()
let adjustmentHeight = (CGRectGetHeight(keybaordFrame)) * (show ? 1 : -1)
scrollView.contentInset.bottom += adjustmentHeight
}

}

但是有几个问题。

  1. 当键盘出现时,尽管我更改了 ScrollView 的内容插图,但整个 View 不会移动。它做了这件奇怪的事情。底部表格 View 位于顶部表格 View 下方。展示起来更容易,所以这是一个视频。

Tableviews overlapping issue

  1. 当我重新聚焦文本字段超过 1 次时, ScrollView 就会离开屏幕!

Tableview going off the screen

有人知道为什么会这样吗?

Dropbox link to demo project

最佳答案

当键盘显示时,UITableViewController 已经自动处理内容插入的调整。没有记录的方法可以禁用此行为。您可以在 StaticTableViewController 中重写 viewWillAppear(animated: Bool) 并且不调用它的 super 方法:

override func viewWillAppear(animated: Bool) {
}

这可能是 UITableViewController 注册键盘事件的地方,因为这会禁用内容插入调整。但是,我无法告诉您不调用 UITableViewController 的 viewWillAppear 是否会产生其他不利影响,并且这种行为可能会随着 iOS 的 future 版本而改变。因此,更安全的方法是不使用 UITableViewController 并将标准 UITableView 添加到 UIViewController 并在其中加载单元格。

另请注意,通过您的设计,用户可以一直向上滚动并将下部内容 View 隐藏在键盘后面。然后用户无法向下滚动,因为任何滚动只会滚动并弹起上方的表格 View 。因此,请重新考虑您的设计,或者在用户滚动时立即隐藏键盘

关于ios - 出现键盘时,UIScrollView 无法正确移动 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31944294/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com