RxKeyboard 2.0.0

RxKeyboard 2.0.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布上次发布2021年1月
SPM支持 SPM

RxKeyboard 维护者RxSwift 社区 维护。



 
依赖
RxSwift~> 6.0
RxCocoa~> 6.0
 

  • 作者
  • Suyeol Jeon

RxKeyboard

Swift CocoaPods Build Status Carthage compatible

RxKeyboard 提供了一种观察键盘帧变化的响应式方法。忘记键盘通知吧。它还与 UIScrollViewKeyboardDismissMode.interactive 完美协作。

rxkeyboard-message rxkeyboard-textview

入门

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)

技巧与窍门

  • 🔗 我想调整 UIScrollViewcontentInset 以适应键盘高度。

    RxKeyboard.instance.visibleHeight
      .drive(onNext: { [scrollView] keyboardVisibleHeight in
        scrollView.contentInset.bottom = keyboardVisibleHeight
      })
      .disposed(by: disposeBag)
  • 🔗 我想调整 UIScrollViewcontentOffset 以适应键盘高度。

    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)

许可证

RxKeyboard 在 MIT 许可下。