(自动布局)容器视图调整大小但子视图不调整大小

jer*_*gdm 5 uiview ios autolayout container-view

我在使用带有容器视图的自动布局时遇到了一些问题(在两种情况下:使用ios5中使用的视图包含模式和一个简单的容器视图).

我有一种自定义的Master Detail控制器,我可以在一些用户操作后重新调整左侧容器的大小,并且关联右侧控制器必须根据未使用的新空间调整大小.

对于"细节"控制器,我使用Xib设置控制器并使用自动布局我内部有一些视图.在视觉格式中他们会是这样的:

  • 五:| [headerView] [内容查看] [footerView] |
  • H:| [headerVieW]
  • H:| [内容查看]
  • H:| [footerView]

这只是解决问题的一种表现形式.

如果我尝试调整细节controller.view框架的大小,这会正确扩展,但子视图不会.

在该控制器的 - (void)viewDidLayoutSubviews方法中,我尝试手动设置框架并且可以正常工作但是我认为这不是正确的事情因为我正在使用自动布局!

如果我有一个通用视图和包含图像视图的子视图,如果我使用autolayout从xib定义该视图,如果运行时在视图设置后更改框架子视图(edample的图像视图)不调整大小,则会再次出现此问题.

有人可以帮帮我吗?

谢谢!

BJ *_*mer 1

根据您对约束的描述,我认为所描述的行为正是您告诉它要做的事情。

请注意,您的水平约束要求视图与其超级视图的左侧齐平。然而,他们没有说明他们应该如何与超级视图的右侧相关。因此,更改超级视图的宽度不会执行任何操作;它们只是与左侧尺寸保持齐平,并保持内部约束提供的任何宽度。

如果您希望视图随其超级视图调整大小,则需要在尾随侧添加约束。具体来说,您的约束可能如下所示:

H:|[headerView]|
H:|[contentView]|
H:|[footerView]|
Run Code Online (Sandbox Code Playgroud)

或者,您可能希望它们仅在超级视图太窄的情况下收缩,否则不完全拉伸。那么你可以这样做:

H:|[headerView]-(>=10)-|
H:|[contentView]-(>=10)-|
H:|[footerView]-(>=10)-|
Run Code Online (Sandbox Code Playgroud)

不管怎样,问题的根源似乎是视图没有以任何方式绑定到超级视图的右边缘,并且这也没有以任何方式绑定到它的宽度。添加这些约束应该可以解决问题。