自动布局:容器视图调整大小,但子视图不会跟着调整。

5

我在使用容器视图的自动布局时遇到了一些问题(包括使用iOS 5中的视图容器模式和简单的容器视图)。

我有一种自定义的主细节控制器,我可以在某些用户操作后调整左侧容器的大小,并且相关联的右控制器必须根据新剩余未使用的空间进行相应的调整。

对于“详细”控制器,我使用Xib设置控制器,并使用自动布局在其中放置了一些视图。在可视格式中,它们可能是这样的:

  • V:|[headerView][contentView][footerView]|
  • H:|[headerVieW]
  • H:|[contentView]
  • H:|[footerView]

这仅是为了理解问题而表示的。

如果我尝试调整详细控制器.view框架,则其会正确扩展,但子视图不会。

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

如果我有一个通用视图和一个包含图像视图的子视图,如果我使用autolayout从xib定义该视图,如果我在视图设置完成后运行时更改框架,则子视图(例如imageviews)不会调整大小。

有人能帮我吗?

谢谢!


你有解决这个问题吗?看起来很多人都遇到了类似的问题,但是没有找到解决方案! - elsurudo
2个回答

1
根据您对约束条件的描述,我认为所描述的行为正是您告诉它要做的事情。
请注意,您的水平约束要求视图与其父视图的左侧对齐。但是,它们并没有说明它们应该如何与父视图的右侧相关联。因此,更改父视图的宽度不会产生任何效果;它们仍然与左侧保持对齐,并保持其内部约束提供的任何宽度。
如果您希望视图随其父视图调整大小,则需要添加有关尾随边缘的约束。具体而言,您的约束可能如下所示:
H:|[headerView]|
H:|[contentView]|
H:|[footerView]|

或者你希望它们只在父视图太窄时收缩,但在其他情况下不要完全伸展。那么你可以这样做:

H:|[headerView]-(>=10)-|
H:|[contentView]-(>=10)-|
H:|[footerView]-(>=10)-|

无论如何,似乎您的问题的根源在于视图没有以任何方式绑定到父视图的右边缘,并且这些视图没有以任何方式绑定到其宽度。添加这些约束应该可以解决问题。


0

如果你的视图在可视化格式中是以 "|" 分隔的(这是你的情况)

CGSize fittingSize = [container systemLayoutSizeFittingSize: UILayoutFittingCompressedSize];
container.frame = CGRectMake(0, 150, 320, fittingSize.height);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接