在好的资源方面,我绝对推荐 WWDC2012 的 3 个视频:OSX/iOS 的 Auto Layouts 简介、Auto Layout by Example 和 Best Practices for Mastering Auto Layout。这些有一些提示,用于查看布局中的歧义和处理冲突
另一个很好的参考是 Erica Sadun 的 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 layoutIfNeeded] 之后,在动画或任何地方,添加约束并再次调用 layoutIfNeeded
[HUDSuperView addConstraint:self.HUDSuperViewToHUDViewConstraint];
[HUDSuperView addConstraint:self.HUDHeight];
[HUDSuperView layoutIfNeeded];
如果你在 animateWithDuration 中调用它们,它甚至可以为外观设置动画......俗气
希望这会有所帮助——这可能更像是朝着解决方案迈出的一步,而不是解决方案本身。在 AutoLayout by Example 视频中也推荐第 17 分钟和第 53 分钟。
史蒂夫