有什么办法可以将PreferredStatusBarStyle与RxCocoa绑定?

时间:2018-07-20 22:39:48

标签: swift rx-swift rx-cocoa

我正在使用以下代码绑定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。如何绑定此属性?

1 个答案:

答案 0 :(得分:2)

您无法将其“绑定”到preferredStatusBarStyle,因为它是生成的属性。如前所述,您将不得不覆盖此属性并返回一个值。一种方法是创建一个BehaviorRelay属性,绑定到该属性,然后从您的重写方法中返回中继的值。您还需要确保在状态栏样式更改时告诉视图控制器:

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)
}