我打算在ViewController的视图中添加一个UIView实例,并观察它的框架/边界的变化。但是frame
和bounds
之间的差异使我感到困惑,viewDidLoad
中的代码如下所示:
let v = UIView()
view.addSubview(v)
v.snp.makeConstraints { (make) in
make.edges.equalToSuperview()
}
v.rx.observe(CGRect.self, #keyPath(UIView.frame))
.subscribe(onNext: { print("frame: \($0!)") })
.disposed(by: rx.disposeBag)
v.rx.observe(CGRect.self, #keyPath(UIView.bounds))
.subscribe(onNext: { print("bounds: \($0!)") })
.disposed(by: rx.disposeBag)
observe
方法的默认选项是[.new, .initial]
,它会像这样注销:
frame: (0.0, 0.0, 0.0, 0.0)
bounds: (0.0, 0.0, 0.0, 0.0)
bounds: (0.0, 0.0, 375.0, 667.0)
那么为什么bounds
可以发出初始值和新值但frame
只能初始值?