RxKeyboard
RxKeyboard 提供了一种观察键盘帧变化的响应式方法。忘记键盘通知吧。它还与 UIScrollViewKeyboardDismissMode.interactive
完美协作。
入门
RxKeyboard 提供了两个 Driver
。
/// An observable keyboard frame.
let frame: Driver<CGRect>
/// An observable visible height of keyboard. Emits keyboard height if the keyboard is visible
/// or `0` if the keyboard is not visible.
let visibleHeight: Driver<CGFloat>
/// Same with `visibleHeight` but only emits values when keyboard is about to show. This is
/// useful when adjusting scroll view content offset.
let willShowVisibleHeight: Driver<CGFloat>
使用 RxKeyboard.instance
获取单例实例。
RxKeyboard.instance
订阅 RxKeyboard.instance.frame
来观察键盘帧变化。
RxKeyboard.instance.frame
.drive(onNext: { frame in
print(frame)
})
.disposed(by: disposeBag)
技巧与窍门
-
🔗 我想调整UIScrollView
的contentInset
以适应键盘高度。RxKeyboard.instance.visibleHeight .drive(onNext: { [scrollView] keyboardVisibleHeight in scrollView.contentInset.bottom = keyboardVisibleHeight }) .disposed(by: disposeBag)
-
🔗 我想调整UIScrollView
的contentOffset
以适应键盘高度。RxKeyboard.instance.willShowVisibleHeight .drive(onNext: { [scrollView] keyboardVisibleHeight in scrollView.contentOffset.y += keyboardVisibleHeight }) .disposed(by: disposeBag)
-
🔗 我想在交互式消失模式下让UIToolbar
随键盘移动。(就像上面的精彩 GIF 一样!)如果你没有使用自动布局
RxKeyboard.instance.visibleHeight .drive(onNext: { [toolbar, view] keyboardVisibleHeight in toolbar.frame.origin.y = view.frame.height - toolbar.frame.height - keyboardVisibleHeight }) .disposed(by: disposeBag)
如果您使用自动布局,需要捕获工具栏的底部约束,并将
constant
设置为键盘可见高度。RxKeyboard.instance.visibleHeight .drive(onNext: { [toolbarBottomConstraint] keyboardVisibleHeight in toolbarBottomConstraint.constant = -1 * keyboardVisibleHeight }) .disposed(by: disposeBag)
注意:在现实世界中,您应与动画块一起使用
setNeedsLayout()
和layoutIfNeeded()
。有关示例,请参阅 示例项目。 -
还有其他问题吗?请打开问题或创建一个拉取请求。
依赖项
需求
- Swift 4
- iOS 8+
贡献
在开发过程中,RxKeyboard 使用 Swift Package Manager 管理依赖。以下命令用于生成 Xcode 项目文件。注意,git 不会跟踪 .xcodeproj
文件更改。
$ swift package generate-xcodeproj
安装
-
使用 CocoaPods:
pod 'RxKeyboard'
-
使用 Carthage:
binary "https://raw.githubusercontent.com/RxSwiftCommunity/RxKeyboard/master/RxKeyboard.json"
⚠️ 使用 Carthage,RxKeyboard 只支持二进制安装- 0.9.2
- Xcode 10.1 (10B61)
- Swift 4.2.1 (swiftlang-1000.11.42 clang-1000.11.45.1)
- 0.9.0
- Xcode 10 (10A255)
- Swift 4.2 (swiftlang-1000.11.37.1 clang-1000.11.45.1)
- 0.8.2
- Xcode 9.3 (9E145)
- Swift 4.1.0 (swiftlang-902.0.48 clang-902.0.37.1)
- 0.7.1
- Xcode 9.1 (9B55)
- Swift 4.0.2 (swiftlang-900.0.69.2 clang-900.0.38)
- 0.7.0
- 9.0.1 (9A1004)
- Swift 4.0 (swiftlang-900.0.65.2 clang-900.0.37)
- 0.9.2
许可证
RxKeyboard 在 MIT 许可下。