自定义UIView如何响应基于约束的帧更改

时间:2014-05-29 04:38:40

标签: ios ios7 nslayoutconstraint

我有一个容器UIView,它有一些约束条件会导致它改变高度以匹配旧的3.5和#34; iPhone或新的4"苹果手机。在容器UIView中,我有几个自定义UIView的副本,让我们称之为DynamicButtonDynamicButton有三个子视图,使用它们的框架(无约束)布局,每当调用[DynamicButton -setFrame]时,三个子视图的框架都会被重新计算

设置了我的约束,以便我的DynamicButton视图将以相同的高度填充整个容器视图。

viewDidLoadviewWillAppear中,我的容器视图的高度是故事板中的高度(无论设备如何)。我的DynamicButton58像素高。

viewDidAppear中,约束最终生效,并且当在旧的3.5"上显示时,containerView高度会降低到正确的值。 iPhone和DynamicButton的{​​{1}}像素高。

但是,我的47类在更改大小时从不会收到DynamicButton消息。

我需要覆盖哪种方法来拦截大小更改,以便我可以重新配置子视图中的帧?

1 个答案:

答案 0 :(得分:3)

覆盖layoutSubviews中的DynamicButton并设置您的子视图'框架。

来自layoutSubviews的文档:

  

[...]子类可以根据需要覆盖此方法,以执行其子视图的更精确布局。仅当子视图的自动调整大小和基于约束的行为不提供所需的行为时,才应覆盖此方法。您可以使用实现直接设置子视图的框架矩形。 [...]