我的应用程序需要支持iOS 12.

有一个叫做KeyboardLayoutGuide的快捷套餐:

https://github.com/freshOS/KeyboardLayoutGuide

在iOS 15中,苹果推出了自己的keyboardLayoutGuide:

https://developer.apple.com/documentation/uikit/uiview/3752221-keyboardlayoutguide

由于相同的名称keyboardLayoutGuide,这将导致冲突.例如:

textView.bottomAnchor.constraint(equalTo: view.keyboardLayoutGuide.topAnchor, constant: -10).isActive = true

请注意,我所说的冲突并不是指任何错误.现在的情况是,我在使用:

import KeyboardLayoutGuide

导致应用程序仅使用第三方库版本,例如,即使在运行iOS 16的较新设备上也是如此.我想在更新的版本上运行"Apple"版本的keyboardLayoutGuide,在比iOS 12更早的设备上运行第三方库版本.

是否可以仅在iOS版本高于15的情况下才能导入第三方KeyboardLayoutGuide?或者,是否可以指定使用哪一种keyboardLayoutGuide

推荐答案

可能最简单的方法是派生KeyboardLayoutGuide包repo并重命名,这样它们就不会与UIKit实现冲突.看起来已经有大约forks个人这样做了,比如this one个.

或者,您可以将KeyboardLayoutGuide导入到另一个文件中,并在UIView上设置一个定制扩展方法,该方法重定向到包的实现.然后,在您的应用程序代码中,您可以执行操作系统版本判断,并在两种实现之间切换.

例如:


// In another file

import KeyboardLayoutGuide
import UIKit

extension UIView {
    var oldKeyboardLayoutGuide: UILayoutGuide {
        keyboardLayoutGuide
    }
}

在您的代码中的某个位置:

var guide : UILayoutGuide
if #unavailable(iOS 15.0) {
    guide = view.oldKeyboardLayoutGuide
} else {
    guide = view.keyboardLayoutGuide
}
textView.bottomAnchor.constraint(equalTo: guide.topAnchor, constant: -10).isActive = true

(或者这可能是UIView上的另一个分机,keyboardLayoutGuide的另一个名称)

注:还没有真正try 过这一点,所以它可能需要一些调整,或者它可能在所有😄上都不起作用.

Swift相关问答推荐

是否可以将字典项绑定到文本字段?

如何使用快速宏用来自函数的关联值来初始化枚举?

如何使用swift宏生成一个带有关联值的枚举?

对多个项目的数组进行排序

在MacOS上检测键盘是否有Globe键

Swift图表';chartXVisibleDomain挂起或崩溃

快速并行读取进程 standardOutput 和 standardError 而不会阻塞

如何在设备(或常量)地址空间中创建缓冲区?

根据其属性组合 2 个模型以在 Swift 中创建另一个模型

避免 `(())` 显式指定 Void 类型的枚举关联值

自定义碰撞形状出现在错误的位置

为什么 NumberFormatter 在 Swift 中将 19,999,999,999,999,999 格式化为 20,000,000,000,000,000?

在主要参与者中启动分离任务和调用非隔离函数之间的区别

如何在 SwiftUI 中将图像传递到 2 个视图

Vapor Swift 如何配置客户端连接超时

找不到目标AAA的 SPM 工件 - 仅限 Xcode 13.3

在 SwiftUI 中,如何在 UIView 内或作为 UIView 使用 UIHostingController?

在 Swift 中获取双精度的小数部分

swift : 具有类型和值的枚举常量

哪些版本的 Xcode 支持哪些版本的 Swift?