为啥 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 只在订阅后触发一次的主要内容,如果未能解决你的问题,请参考以下文章
为啥 UIView 的扩展对除了放置在 IB 上的 UIView 之外的其他控件没有直接影响?
与嵌入式 UITableView 交互后,为啥我的 UIView 的框架会发生意外变化?
为啥在 Swift 中使用惰性 var 初始化时添加框架不显示 UIView