如何在 swift 3+ 中调整键盘的滚动视图

2024-02-20

如何调整滚动视图以垂直补偿键盘?继续阅读...

是的,我知道这是一些基本信息,但今天我随机注意到,我看到的关于这个主题的所有答案都充满了信息、版本和/或到处使用刘海......但对于 Swift 来说没有什么可靠的3+。


斯威夫特 4.2:

代替滚动视图对于 UITableView、UICollectionView 等

let scrollView = UIScrollView()

添加观察员。

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

添加一些函数来监听通知:

@objc func keyboardWillHide(notification: Notification) {
    let contentInsets = UIEdgeInsets.zero
    scrollView.contentInset = contentInsets
    scrollView.scrollIndicatorInsets = contentInsets
}

@objc func keyboardWillShow(notification: Notification) {
    guard let keyboardFrame: CGRect = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue else { return }
    scrollView.contentInset.bottom = keyboardFrame.height
}

值得注意的是,如果您的部署目标是 iOS 9 或更高版本,则无需再删除观察者。查看通知中心文档以获取更多信息。

deinit {
    NotificationCenter.default.removeObserver(self)
}

------------------------------------------------

Swift 3:

let scrollView = UIScrollView()

添加观察员。

override open func viewDidLoad() {
    super.viewDidLoad()
    NSNotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(noti:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
    NSNotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(noti:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
}

添加一些函数来监听通知:

func keyboardWillHide(noti: Notification) {
    let contentInsets = UIEdgeInsets.zero
    scrollView.contentInset = contentInsets
    scrollView.scrollIndicatorInsets = contentInsets
}

func keyboardWillShow(noti: Notification) {

    guard let userInfo = noti.userInfo else { return }
    guard var keyboardFrame: CGRect = (userInfo[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue else { return }
    keyboardFrame = self.view.convert(keyboardFrame, from: nil)

    var contentInset:UIEdgeInsets = scrollView.contentInset
    contentInset.bottom = keyboardFrame.size.height
    scrollView.contentInset = contentInset
}

值得注意的是,如果您的部署目标是 iOS 9 或更高版本,则无需再删除观察者。查看通知中心文档以获取更多信息。

deinit {
    NotificationCenter.default.removeObserver(self)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 swift 3+ 中调整键盘的滚动视图 的相关文章

  • 核心数据 NSFetchRequest 还获取实体的子对象

    我是 iOS 开发和 Core Data 的新手 我有一个父 NSManagedObject class Units interface Properties NSManagedObject property nonatomic retai
  • 在运行时获取 iPhone 应用程序的产品名称?

    如何才能实现这一目标 我想获取名称 以便可以在应用程序中显示它 当然 每次更改名称时不必在代码中更改它 Try this NSBundle bundle NSBundle mainBundle NSDictionary info bundl
  • IOS7 状态栏在选定控制器上隐藏/显示

    我想在某些控制器上显示和隐藏状态栏 这可以完成吗 或者它更像是一个整体应用程序设置 我看过很多关于 plist 更新的帖子 问题 View controller based status bar appearance NO 如果这完成了 那
  • 如果我的消耗性 IAP 被退款,我会收到任何通知吗?

    我有 Apple iOS 应用程序 其中有很多消耗性 IAP 我非常担心用户购买IAP并使用一段时间后向Apple客服投诉并获得退款 如果我的消耗品 IAP 退款 我会收到任何通知吗 我如何注意到这一点并阻止用户使用 IAP None
  • 我可以更改键盘方向吗?

    例如我用这段代码关闭自动旋转 BOOL shouldAutorotateToInterfaceOrientation UIInterfaceOrientation interfaceOrientation return NO BOOL sh
  • 无法在 iOS 企业应用程序中连接到 example.com

    我面临着一个严重的问题 我正在尝试使企业应用程序上线 通过使用 BetaBuilder 我按照以下步骤操作 myApp ipa manifest plist index html 清单 plist
  • 相当于 Interface Builder 中 UIButton 的动态类型“自动调整字体”设置?

    UILabel 有一个Dynamic Type Automatically Adjusts FontInterface Builder 属性检查器中的复选框 Interface Builder 中是否有等效项用于自动调整 UIButton
  • 奇怪的 UITableView 插入/删除行动画

    在带有动画 UITableView RowAnimationTop 的 UITableView 中插入 删除 UITableViewCell 时 我看到了奇怪的效果 当要插入的单元格比上面的单元格大得多时 就会发生动画故障 显示模拟器中的故
  • 具有自动布局的 UITableViewCell 中的 UILabel 高度错误

    我有一个UITableView单元格的固定高度为 100 点 这些单元格是在 xib 文件中创建的 该文件使用 3 个约束来固定UILabel到单元格的左 右和上边缘contentView 标签的垂直拥抱优先级设置为 1000 因为我希望单
  • iphone:在 UIWebView 之上查看?

    我正在开发一个浏览器应用程序 并且 UIWebView 顶部有一个地址栏 在 MobileSafari 上 如果向下滚动 地址栏开始移动到顶部 移出屏幕 并且 UIWebView 不会滚动 只有当地址栏完全消失时 它才开始滚动 我也想在我的
  • 两者都实现了类。将使用两者之一

    我有一个项目 它具有使用 SocketRocket 的依赖项 通过 CocoaPods 安装 并从 HeapAnalytics 导入了静态库 显然 HeapAnalytics 库已经使用了 SocketRocket 编译时没有出现错误 但在
  • 如何在 ios 7 上更改重新排序控制图像

    我正在寻找一种更改重新排序控件图像和大小的方法 我使用此代码来更改重新排序图像 void tableView UITableView tableView willDisplayCell UITableViewCell cell forRow
  • 多次添加同一个子视图来查看

    我不知道这是否可行 但我想做的是将子视图多次添加到视图中 我尝试过这样的事情 self view addSubview newView newView center CGPointMake 160 100 self view addSubv
  • “同时创建 xib 文件”按钮已禁用

    我在创建时遇到这个问题UIView s子类 创建 例如 UIViewControllers or UITableViewCells没关系 为什么会出现这种情况 I create view using cmd N and Xcode Vers
  • -[EAGLContext renderbufferStorage:fromDrawable:] 第二次失败?

    我正在开发一个 iOS openGL ES 应用程序 我正在做通常的 EAGLView ES2Render 的事情 启动时 使用以下代码成功创建 frambuffer BOOL createFramebuffers EAGLContext
  • iOS - NSNotificationCenter 多个UIKeyboard通知

    我有两个视图控制器 我们称它们为 A 和 B 1 在 A 中 我显示一个包含文本字段的 popOver 2 B中有一个UITextView用于简单的文本编辑 我必须管理 A 和 B 中的键盘才能滚动键盘隐藏的内容 我知道如何重新定位内容 我
  • iOS Storyboards 我应该使用它们吗? [复制]

    这个问题在这里已经有答案了 我是 iOS 开发新手 尚未创建应用程序 但我向我的朋友寻求建议 他在市场上拥有非常高评价的应用程序 他说不要使用故事板 尽管我很想听取他的建议 但它们似乎确实很有帮助 这是否会在将来给我的应用程序带来问题 我有
  • 在 Flutter 中显示 iOS 的 PDF 内联文件

    我正在 flutter 中专门为 iOS 开发一个应用程序 现阶段 我需要向其中添加 PDF 文件 问题是 flutter 没有原生的方式来显示 PDF 文件 据我研究 由此tread https github com flutter fl
  • 用 UIView 像翻书一样翻页?

    我正在尝试在之间切换UIViews让它看起来就像你正在翻书的一页 The UIViewAnimationTransitionCurlUp如果我能让它向左或向右卷曲 那就非常接近了 这可能吗 我尝试过使用CATRansition但没有一种动画
  • 无法将 admob 与 firebase iOS/Android 项目链接

    我有两个帐户 A 和 B A 是在 Firebase 上托管 iOS Android unity 手机游戏的主帐户 B 用于将 admob 集成到 iOS Android 手机游戏中 我在尝试将 admob 分析链接到 Firebase 项

随机推荐