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