ios - 如何让自动布局在 Xcode 中工作

标签 ios xcode ios6 nslayoutconstraint

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

我在 iOS 6 上。我有一个带有两个 subview 的 View Controller ,一个在另一个之上:

viewcontroller layout

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

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

tableview constraints

mapview constraints

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

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

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

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

最佳答案

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

创建类型为 NSLayoutConstraint 的 socket 在您的 View Controller 中:

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

将 socket 连接到 Storyboard顶 View 上的 height=127 约束。 See this answer如果您需要更多帮助将 socket 连接到约束。

然后,要更改顶 View 的高度,并让自动布局也更新底 View 的框架,请设置约束的常量:
self.topViewHeightConstraint.constant = 514;

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

关于ios - 如何让自动布局在 Xcode 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17980489/

相关文章:

objective-c - iOS 使用 navigationController popToRootViewControllerAnimated

html - iOS 6 Safari 背景丢失

ios - Swift Serial Dispatch Block 仅在委托(delegate)后完成

ios - UISearchBar - ReturnKeyType 不适用于 iOS 8

ios - Xcode 8 约束

ios - Xcode swift在多个 Storyboard中管理多个 View Controller

ios - 解析 - 从关系中获取对象

iphone - iOS6设备旋转受到限制

ios - 使用子类化 UIActivityItemProvider 时没有可用的共享操作

ios - SpriteKit 滚动背景图像显示图像之间的线条