Есть ли способ связать предпочтительныйStatusBarStyle с 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 в контроллерах представления. Как привязать это свойство?


person Meanteacher    schedule 20.07.2018    source источник


Ответы (1)


Вы не можете «привязать» к 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)
}
person daltonclaybrook    schedule 21.07.2018