【问题标题】:Is there a way yo bind preferredStatusBarStyle with RxCocoa?有没有办法将preferredStatusBarStyle 与RxCocoa 绑定?
【发布时间】:2018-07-20 22:39:48
【问题描述】:

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

【问题讨论】:

    标签: swift rx-swift rx-cocoa


    【解决方案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)
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-03
      • 1970-01-01
      • 2019-12-25
      • 2012-07-07
      • 2010-12-19
      • 1970-01-01
      • 1970-01-01
      • 2017-10-20
      • 2011-01-21
      相关资源
      最近更新 更多