为啥 UIView 框架上的 observable 只在订阅后触发一次

Posted

技术标签:

【中文标题】为啥 UIView 框架上的 observable 只在订阅后触发一次【英文标题】:Why the observable on frame of UIView only trigger once after subscribing为什么 UIView 框架上的 observable 只在订阅后触发一次 【发布时间】:2018-08-29 14:05:57 【问题描述】:

我正在使用 RxSwift 来观察一个 UIView 的框架。这是我在视图中的代码

self.rx.observe(CGRect.self, #keyPath(UIView.frame))
    .subscribe(onNext:  frame in
        print("Got new frame \(frame)")
    )
    .debug()
    .disposed(by: disposeBag)

但是当我更改视图框架时它只打印一次并且不会运行第二次。有谁知道为什么会这样?提前致谢!

【问题讨论】:

其实不能,看看这个UIView frame/position binding 显然有一些无证的观察方式......如果你想危险地生活:KVO for a UIView frame 【参考方案1】:

这是旧帖子,但我分享我的代码。它工作正常。

   self.mapView
            .rx
            .observe(CGRect.self, #keyPath(UIView.frame))
            .asDriver(onErrorJustReturn: CGRect.zero)
            .drive(onNext:  (rect) in
                log.debug("Frame changed to \(String(describing: rect))")
            ).disposed(by: self.disposeBag)

在这里,我尝试使用 Driver 观察 mapView 的框架。

希望对您有所帮助。

【讨论】:

以上是关于为啥 UIView 框架上的 observable 只在订阅后触发一次的主要内容,如果未能解决你的问题,请参考以下文章