【发布时间】:2016-02-01 18:19:03
【问题描述】:
在我的 iOS 应用程序中,我使用自动布局将视图的宽度调整到其父级,方法是将其约束设置为尾随、前导、顶部和底部为 0。
我想根据视图的宽度进行一些计算,但是我似乎找不到正确的事件,其中视图的新宽度是根据其布局计算的。它总是停留在 600 上,包括 layoutSubviews 或 updateConstraints 等事件。
什么是正确的事件?正确的做法是什么?
【问题讨论】:
标签: ios autolayout
在我的 iOS 应用程序中,我使用自动布局将视图的宽度调整到其父级,方法是将其约束设置为尾随、前导、顶部和底部为 0。
我想根据视图的宽度进行一些计算,但是我似乎找不到正确的事件,其中视图的新宽度是根据其布局计算的。它总是停留在 600 上,包括 layoutSubviews 或 updateConstraints 等事件。
什么是正确的事件?正确的做法是什么?
【问题讨论】:
标签: ios autolayout
当一个子视图导致同级子视图的框架发生变化时,我已经这样做了,我在子视图内的图层上添加了一个 KVO 通知。不确定它是否“正确”,但它有效。
[self.layer addObserver:self
forKeyPath:@"bounds"
options:0
context:NULL];
...
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary<NSString *,id> *)change
context:(void *)context {
// calculate here.
}
【讨论】:
正确框架可用的位置在viewDidAppear 之后。您可以使用此方法进行计算。
【讨论】:
layoutSubviews方法中调用[super layoutSubviews]
- (void)setBounds:(CGRect)newBounds