【问题标题】:UIView subview auto resizingUIView 子视图自动调整大小
【发布时间】:2013-01-22 09:45:35
【问题描述】:

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

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

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

但是当第二个视图被添加为子视图时,我在这个视图中添加了一个 HUD。当第二个视图调整到原始高度时,HUD 会粘在视图的顶部,并且只有几个像素高:

我用 NSLayoutConstraints 玩了一下...但直到现在我才开始工作...

有人对此有一个好主意吗?或者有人知道关于这些限制的良好且解释清楚的资源吗?

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

【问题讨论】:

  • 您是否正在从 XIB 加载视图?如果是,请尝试取消选中自动布局子视图并将所有可能的位置视图排列设置为关闭。可以在为 XIB 设置框架的地方完成。
  • 没有成功,很遗憾……

标签: uiview autoresize autoresizingmask nslayoutconstraint


【解决方案1】:

在好的资源方面,我绝对推荐 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 分钟。

史蒂夫

【讨论】:

  • 没有。我正在完全以编程方式创建 HUD。而且我在日志上遇到了很多错误……似乎我必须学习如何使用这些布局约束。对我来说,这个概念非常模糊且不易使用。我什至没有用它完成一个简单的测试应用程序:) 感谢您的提示。我要去试试 WWDC 视频。
  • 如果您以编程方式执行此操作,我会更好。我与IB斗争。建议将 HUD 的高度约束设置为 @"V:|[HUDView(40)]" 作为您在新视图控制器中布置所有其他内容后或在视图控制器视图被指示后立即执行的最后一件事出现(动画?)然后在 HUDView 所属的视图上使用 layoutIfNeeded。祝你好运
猜你喜欢
  • 2014-09-02
  • 2013-04-12
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-16
相关资源
最近更新 更多