1

我查看了http://developer.apple.com/library/ios/#recipes/xcode_help-interface_builder/articles/UnderstandingAutolayout.html但解释很模糊。

我在 iOS 6 上。我有一个带有两个子视图的视图控制器,一个在另一个之上:

视图控制器布局

我想使用自动布局来设置视图,如果我以编程方式更改顶视图的框架,底视图将调整大小以适应顶视图的新框架。也就是说,如果我增加顶视图的高度,底视图的高度应该降低以保持两个视图之间的相同间隔;如果我降低顶视图的高度,则会发生相反的情况。

我在 Xcode 中为这两个视图获得的默认约束是:

表视图约束

地图视图约束

如果我按住 Command 并调整顶部(地图)视图的大小,底部(表格视图)似乎会正确地垂直收缩或扩展以遵守它们之间的空间限制。

但是,当我尝试通过代码修改顶视图的框架或边界时,例如:

self.topView.frame = CGRectMake(0, 0, 320, 514);

底视图不缩小。那么我错过了什么?

4

1 回答 1

4

你不能这样修改self.topView.frame。设置框架是自动布局的工作。您需要修改约束,然后让自动布局更新框架。

NSLayoutConstraint在视图控制器中创建一个类型的插座:

@property (nonatomic, strong) IBOutlet NSLayoutConstraint *topViewHeightConstraint;

将插座连接到故事板顶视图上的 height=127 约束。 如果您需要更多帮助将插座连接到约束,请参阅此答案。

然后,要更改顶视图的高度,并让自动布局也更新底视图的框架,请设置约束的常量:

self.topViewHeightConstraint.constant = 514;

在运行循环结束时(不是马上,而是在屏幕更新之前),自动布局将修改两个视图的框架以满足更改后的约束。

于 2013-07-31T20:42:01.597 回答