有没有办法将 preferredStatusBarStyle 与 RxCocoa 绑定?

Is there a way yo bind preferredStatusBarStyle with RxCocoa?

我正在使用以下代码绑定 statusBarStyle

public extension Reactive where Base: UIApplication {

    public var statusBarStyle: Binder<UIStatusBarStyle> {
        return Binder(self.base) { view, attr in
            view.statusBarStyle = attr
        }
    }

}

然而 属性 已弃用 iOS 9. 新文档建议在视图控制器中覆盖 preferredStatusBarStyle。我该如何绑定这个 属性?

你不能"bind"到preferredStatusBarStyle,因为它是生成的属性。正如您所说,您必须覆盖此 属性 和 return 值。一种方法可能是创建一个 BehaviorRelay 属性,改为绑定到它,然后 return 来自重写方法的中继值。您还需要确保在状态栏样式更改时通知视图控制器:

let statusBarStyleRelay = BehaviorRelay<UIStatusBarStyle>(value: .default)

override var preferredStatusBarStyle: UIStatusBarStyle {
    return statusBarStyleRelay.value
}

func setupBindings(for statusBarObservable: Observable<UIStatusBarStyle>) {
    statusBarObservable
        .bind(to: statusBarStyleRelay)
        .disposed(by: disposeBag)

    statusBarStyleRelay
        .distinctUntilChanged()
        .do(onNext: { [weak self] _ in
            self?.setNeedsStatusBarAppearanceUpdate()
        })
        .subscribe()
        .disposed(by: disposeBag)
}