⌨️ KeyboardLayoutGuide⌨️
想象一下能够直接在视图和 iOS 键盘之间设置 Auto Layout 约束,这样当键盘的框架发生变化时,布局也会更新。KeyboardLayoutGuide 可以实现这一点,提供选项,完全在 Interface Builder 中或通过简单的接口在代码中实现。
constrainKeyboard(myView) { keyboard, myView in
// create and return your keyboard-based constraints
}
使用
通过代码
将您的视图控制器声明为符合 KeyboardConstraining
。这是一个空协议,使许多方法可用,使您能够做类似以下的事情:
constrainKeyboard(contentView) { keyboard, contentView in
return [keyboard.topAnchor.constraint(equalTo: contentView.bottomAnchor)]
}
contentView
的底部现在将被约束到键盘的顶部,并在键盘的框架发生变化时更新。您可以使用原始的 Auto Layout 或任何第三方库来创建约束。它们将在视图添加到窗口时激活,并在 viewWillDisappear
时取消激活。
对于更复杂的示例,想象一个视图,其中表格视图的底部应该位于标签栏或键盘的顶部,以较高的那个为准。在这种情况下,您会将您的 tableView 的底部约束到 bottomLayoutGuide 的顶部,优先级低于 1000(因为它需要当键盘出现时被打破)。与键盘的不等式约束结合使用,这将确保正确的行为。
constrainKeyboard(tableView) { keyboard, tableView in
return [keyboard.topAnchor.constraint(greaterThanOrEqualTo: tableView.bottomAnchor)]
}
通过 Interface Builder
简单地将一个新的 UIView
添加到您的视图中。这将成为您的键盘代理,所以将其分配给视图控制器的 klg_keyboardProxy
属性。在运行时,键盘代理的框架将约束为匹配键盘,因此您可以在其它视图和键盘代理之间添加任何所需的约束。
虽然约束将在运行时添加,但您仍需要让 Interface Builder 确认键盘代理具有有效的布局。在代理和其父视图之间添加 leading、trailing、bottom 和 height 约束。这些占位符约束会满足 Interface Builder,但您应该确保在构建时移除它们,通过在 Interface Builder 中检查每个的 Placeholder ☑ Remove at build time
。您可以通过调整键盘代理上的 height 约束来预览键盘出现时布局的变化。
如何工作的?
使用 LifecycleHooks 添加到您的视图控制器以进行生命周期驱动的行为。由于键盘布局指南附加到窗口本身,因此其框架不受视图框架更改的影响。
安装
CocoaPods
KeyboardLayoutGuide 通过 CocoaPods 提供。要安装它,简单地将以下行添加到您的 Podfile 中
pod "KeyboardLayoutGuide"
Carthage
将以下内容添加到您的 Cartfile 中
github "johnpatrickmorgan/KeyboardLayoutGuide"
Swift Package Manager
将以下内容添加到您的 Package.swift
文件的 dependencies
数组中
dependencies: [
.package(url: "https://github.com/johnpatrickmorgan/KeyboardLayoutGuide.git", from: "0.7.1")
]
许可证
KeyboardLayoutGuide 项目可以通过 MIT 许可证获取。更多信息请参阅 LICENSE 文件。