UIView 事件应用约束并设置子视图宽度

Posted

技术标签:

【中文标题】UIView 事件应用约束并设置子视图宽度【英文标题】:UIView event to have constraint apply and set subviews width 【发布时间】:2016-02-01 18:19:03 【问题描述】:

在我的 ios 应用程序中,我使用自动布局将视图的宽度调整到其父级,方法是将其约束设置为尾随、前导、顶部和底部为 0。

我想根据视图的宽度进行一些计算,但是我似乎找不到正确的事件,其中视图的新宽度是根据其布局计算的。它总是停留在 600 上,包括 layoutSubviews 或 updateConstraints 等事件。

什么是正确的事件?正确的做法是什么?

【问题讨论】:

【参考方案1】:

当一个子视图导致同级子视图的框架发生变化时,我已经这样做了,我在子视图内的图层上添加了一个 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.

【讨论】:

【参考方案2】:

正确框架可用的位置在viewDidAppear 之后。您可以使用此方法进行计算。

【讨论】:

但我使用的是 uiview 而不是 uiviewcontroller 然后在你的视图的layoutSubviews方法中调用[super layoutSubviews] 也可以尝试覆盖- (void)setBounds:(CGRect)newBounds 这在自动布局之前很久了 在自动布局之前很久吗?

以上是关于UIView 事件应用约束并设置子视图宽度的主要内容,如果未能解决你的问题,请参考以下文章

导航栏可能导致 UIView 偏移

如何使用自动布局在 Swift 中为可重用的 UIView 设置约束?

使用 IOS 中的约束将 UIView 中的子视图居中

如何为运行时计算的变量高度设置布局约束?

添加 UIView 并使用自动布局重新计算约束

如何使用自动布局“项目格式约束”为 UIViews 设置相等的宽度