UIView子视图自动调整大小

UIView子视图自动调整大小,uiview,autoresize,autoresizingmask,nslayoutconstraint,Uiview,Autoresize,Autoresizingmask,Nslayoutconstraint,我编写了一个小UIView子类来显示HUD的进度。这个HUD视图工作得很好,但在过去的几天里我遇到了一个小问题 在我的应用程序中,我以自定义的方式呈现UIViewController。当用户在tableView中选择一行时,我正在创建第二个viewController的实例,将其移动到当前VC,将其视图高度设置为零,将其添加为当前VC视图的子视图(在选定单元格的位置),并将高度设置回原始高度 这种行为看起来很酷,效果很好 但是,当第二个视图作为子视图添加时,我将向该视图添加一个HUD。当第二个视

我编写了一个小UIView子类来显示HUD的进度。这个HUD视图工作得很好,但在过去的几天里我遇到了一个小问题

在我的应用程序中,我以自定义的方式呈现UIViewController。当用户在tableView中选择一行时,我正在创建第二个viewController的实例,将其移动到当前VC,将其视图高度设置为零,将其添加为当前VC视图的子视图(在选定单元格的位置),并将高度设置回原始高度

这种行为看起来很酷,效果很好

但是,当第二个视图作为子视图添加时,我将向该视图添加一个HUD。当第二个视图调整到原始高度时,HUD将固定在视图顶部,高度仅为几个像素:

我在NSLayoutConstraints上玩了一会儿。。。但我直到现在才开始工作

有人有好主意吗?或者有人知道关于这些约束的好的、解释得很好的资源吗


HUD实际上是一个背景视图,小窗口作为子视图。所有其他元素(进度视图、标签等)都是小窗口的子视图。

就好的资源而言,我绝对推荐WWDC2012的3个视频:OSX/iOS自动布局介绍、示例自动布局以及掌握自动布局的最佳实践。这些有一些关于在布局中寻找歧义和处理冲突的技巧

另一个很好的参考是埃里卡·萨顿的iOS6食谱书

你有问题。我假设您没有看到错误消息,并且您正在将进度HUD完全放在XIB中。如果是这样的话,听起来您有两个约束没有按照您希望的那样从xib中执行-从superView顶部的高度和HUD的高度

首先,为.h文件的约束创建一个出口

@property (strong) IBOutlet NSLayoutConstraint *HUDSuperViewToHUDConstraint;
@property (strong) IBOutlet NSLayoutConstraint *HUDHeight;
接下来,在使用HUD打开新viewController的方法中,请删除约束,以便首次显示新视图时不会发生冲突

[HUDSuperView removeConstraint:self.HUDSuperViewToHUDViewConstraint];
[HUDSuperView removeConstraint:self.HUDHeight];
第一次调用[HUDSuperView LayoutFneed]后,在动画中或任何位置,添加约束并再次调用LayoutFneed

[HUDSuperView addConstraint:self.HUDSuperViewToHUDViewConstraint];
[HUDSuperView addConstraint:self.HUDHeight];
[HUDSuperView layoutIfNeeded];
如果在动画持续时间内调用这些,它甚至可能会使外观动画化…奇奇

希望这能有所帮助——这可能更像是朝着解决方案迈出的一步,而不是解决方案本身。在自动布局示例视频中也推荐第17分钟和第53分钟


Steve

您是否正在从XIB加载视图?如果是,请尝试取消选中“自动布局”子视图,并将所有可能的位置视图排列设置为“关闭”。它可以在为XIB设置框架的地方完成。不幸的是,没有做到这一点……没有。我完全是通过编程方式创建HUD的。我在日志中发现了很多错误…看来我必须学习如何使用这些布局约束。对我来说,这个概念相当模糊,不容易使用。我甚至没有用它完成一个简单的测试应用:)谢谢你的提示。我可以试试WWDC的视频。如果你是以编程的方式来做这件事,我会做得更好。我很难理解IB。建议设置HUD的高度约束,即@“V:|[HUDView(40)],作为在新视图控制器中布置所有其他内容后或在指示视图控制器视图显示(动画?)后立即执行的最后一项操作,然后在HUDView所属的视图上使用LAYUTIFNEED。祝你好运