【问题标题】:Update constraints of subviews after superview frame changes超级视图框架更改后更新子视图的约束
【发布时间】:2015-10-07 12:19:49
【问题描述】:

我有一个 UIView 子类(用于处理拖放),并且在 Interface Build 中我添加了两个子视图:UIImageViewUILabel

两者都有约束:

UIImageView 边框匹配超级视图边框以填充所有可用空间。 UILabel 垂直和水平居中。

这里可以看到三个(superview背景是绿色的)。

当我在超级视图中为帧更改设置动画时,我的问题就出现了。 superview 看起来不错,但它的 subviews 变得疯狂。

在这里你可以看到(忽略棕色方块,从另一个角度)

如您所见,尽管我在每个子视图上都调用了updateConstraints,但子视图从父视图中“落下”。

我知道将 AutoLayout 与 setFrame 混合使用是一种不好的做法,但这是我知道的唯一方法。

谢谢

【问题讨论】:

  • 为什么不移除superview并将UIImageView的背景设置为绿色?然后使用正确的contentmode正确调整图片大小,看这个问题:stackoverflow.com/questions/4895272/…
  • 我试过了,但后来我无法将 UILabel 设置为 UIImageView 的子视图。此外,绿色只是暂时的。
  • 是否可以包含您的源代码?您所描述的行为是预期会发生的。需要考虑的几件事:您是否在控制台运行时收到任何警告?如果约束无法解决,一些约束将被破坏,您将在日志中收到警报。 -updateConstraints 不需要在子视图上调用,除非您实际修改它们。在您的情况下,这听起来没有必要。你是如何处理定位被拖动的视图的?如果视图是使用约束定位的,但随后您修改了框架,则可能会发生意外行为
  • 可以使用自动布局来为帧更改设置动画:stackoverflow.com/questions/13296232 您有什么理由不能为超级视图执行此操作吗?

标签: ios objective-c ios9


【解决方案1】:

感谢 cmets 我做了一些更改。

1) 使用 UIImageView 更改超级视图(绿色)。

2) 移除 UILabel 并使用 CATextLayer 放置文本,使用this answer 将文本垂直居中放置在 UIImageView 前面。

现在它工作正常。感谢您的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 2015-08-30
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多