更新一些子视图而不更新所有子视图

Posted

技术标签:

【中文标题】更新一些子视图而不更新所有子视图【英文标题】:Update some subviews without updating all of them 【发布时间】:2016-02-26 02:23:30 【问题描述】:

我有一个UIViewController,其中有几个不同的UIView 子视图。当用户调用某个动作时,我手动更改每个动作的大小、比例和位置。我想更新 UILabels 之一(其中一个子视图)中的文本,但每次我这样做时,所有子视图都会恢复到故事板要求的原始大小和位置。有没有办法防止这种情况发生,即只更改文本而不恢复到旧的测量值?

谢谢

【问题讨论】:

【参考方案1】:

我想更新其中一个 UILabel(其中一个子视图)中的文本,但每次我这样做时,所有子视图都会恢复到情节提要所需的原始大小和位置。有没有办法防止这种情况发生,即只更改文本而不恢复到旧的测量值?

问题是您通过设置它们的frame 属性来更改子视图的大小和位置。您必须对受自动布局控制的视图执行此操作!如果你这样做了,这件事就会发生:当布局时间到来时,自动布局约束被强制执行,并且视图跳回到你所说的故事板所要求的大小和位置。并且设置标签文本确实会导致布局时间发生。

相反,要更改子视图的大小和位置,请更改它们的约束! (或者,更改它们的框架并然后更改它们的约束以匹配。)这样,当布局时间到来时,什么都不会发生:约束将匹配子视图的当前大小和位置。

【讨论】:

动画约束更改:***.com/questions/12622424/…

以上是关于更新一些子视图而不更新所有子视图的主要内容,如果未能解决你的问题,请参考以下文章

超级视图框架更改后更新子视图的约束

子视图更改SwiftUI后更新视图

如何从 iPad 中的子视图更新 Superview?

发布的数据更新子视图但不更新父视图

12W学习笔记——独立子查询,更新,删除,建立视图

无法更新我的视图的子视图