2013-02-07 123 views
0

我写了一个小UIView子类来显示进度HUD。 HUD视图完美无缺,但在最后几天我遇到了一些小问题。UIView子视图自动调整大小

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

该行为看起来很酷,而且效果很好。

但是当第二个视图添加为子视图时,我将HUD添加到此视图。当第二个观点是在调整到原来的高度,HUD坚持认为的顶部,仅仅是高几个像素: enter image description here

我周围NSLayoutConstraints有点玩过...但我没有得到它工作到现在...

有人在这一个好主意?或者是否有人知道这些限制条件下的良好和充分解释的资源?

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

+0

您是从XIB加载视图?如果是,请尝试取消选中自动布局子视图并将所有可能的位置视图安排设置为关闭。它可以在为XIB设置帧的地方完成。 – Mohammad

+0

没有办法,不幸的是... –

回答

0

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

另一个很好的参考是Erica Sadun的iOS6食谱书。

重新提出您的问题。我假设你没有看到错误信息,并且你完全在XIB中规划了进度HUD。如果是这样,这听起来像你有两个限制,不像你希望从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内它甚至可能是动态的外观... cheesey

希望这有助于 - 它可能更多向解决方案迈出了一步,而不是解决方案本身。在AutoLayout by Example视频中也推荐分钟17和53。

Steve

+0

不,我正在完全编程创建HUD。我在日志中收到很多错误... 好像我将不得不学习如何使用这些布局约束。对我来说,这个概念非常模糊而且不易使用。我甚至没有得到一个简单的测试应用程序:)谢谢你的提示。我想尝试一下WWDC视频。 –

+0

如果您以编程方式进行此操作,我会更好。我与IB斗争。建议设置HUD的高度限制ie @“V:| [HUDView(40)]”作为您在新视图控制器中放置其他所有内容之后执行的最后一项操作,或者在指示视图控制器视图之后立即执行出现(动画?),然后在HUDView属于的视图上使用layoutIfNeeded。祝你好运 – Steve

相关问题