向上推键盘 Swift iOS 后,我的 Scrollview 不会一直向上滚动

Posted

技术标签:

【中文标题】向上推键盘 Swift iOS 后,我的 Scrollview 不会一直向上滚动【英文标题】:My Scrollview doesn't scroll all the way up after pushing up the keyboard Swift iOS 【发布时间】:2020-01-16 20:17:53 【问题描述】:

我有一个滚动视图,里面有很多文本字段。当我向上推滚动视图以使键盘不隐藏某些子视图时,我无法一直滚动到滚动视图的顶部。这是我的代码。任何人都可以帮忙吗?

class IncomingPackageViewController: UIViewController
    override func viewDidLoad() 
        super.viewDidLoad()
        NotificationCenter.default.addObserver(self,selector:#selector(self.keyboardWillShow),name:UIResponder.keyboardDidShowNotification, object: nil)
        NotificationCenter.default.addObserver(self,selector: #selector(self.keyboardWillHide),name:UIResponder.keyboardDidHideNotification, object: nil)

    

    @objc func keyboardWillShow(notification: Notification) 
        guard let userInfo = notification.userInfo,
            let frame = (userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue else return
        let contentInset = UIEdgeInsets(top: 0, left: 0, bottom: frame.height, right: 0)
        if self.view.frame.origin.y == 0 
            self.view.frame.origin.y -= contentInset.bottom
        
    

    @objc func keyboardWillHide(notification: Notification) 
        if self.view.frame.origin.y != 0 
            self.view.frame.origin.y = 0
        
    

【问题讨论】:

你真的应该使用Auto Layout而不是静态帧 您也可以尝试使用keyboardDidShow 通知,因为此通知是在键盘出现后发出的。 【参考方案1】:

你应该使用scrollView.contentInset,你不应该弄乱 ViewControllers 视图框架。

我还建议您使用tableView,因为它可以免费为您提供这种行为。

【讨论】:

以上是关于向上推键盘 Swift iOS 后,我的 Scrollview 不会一直向上滚动的主要内容,如果未能解决你的问题,请参考以下文章

使用 phonegap 防止键盘在 iOS 应用程序中向上推 webview

Swift 防止 TabBar 在键盘处于活动状态时向上移动

SWIFT:用键盘向上移动的UIView,在初始移动后移动非常奇怪,不会回落

Android:如何防止键盘在我的布局中向上推某个视图? [复制]

SwiftUI - 如何防止工作表中的键盘向上推我的主 UI

显示键盘时,自定义 UIView 正在向上推部分内容