2013-04-18 56 views
0

我遇到一个奇怪的调整行为。UIView调整子视图的大小

当我调整一个UIView,它的子视图的高度变为0

我会想象下面的代码将只调整的观点 - 而不是它的子视图。

NSLog(@"view = %@", view);  
NSLog(@"subview = %@", subview); 
CGRect frame = view.frame; 
frame.size.height = 50; 
view.frame = frame; 
NSLog(@"view = %@", view); 
NSLog(@"subview = %@", subview); 

然而,上述得到以下输出:

view = <UIView: 0x97e68c0; frame = (0 0; 320 400); autoresize = RM+BM; layer = <CALayer: 0x97e5f10>> 
subview = <UIView: 0xb87f510; frame = (0 0; 320 50); autoresize = W+H; layer = <CALayer: 0xb87f020>> 
view = <UIView: 0x97e68c0; frame = (0 0; 320 50); autoresize = RM+BM; layer = <CALayer: 0x97e5f10>> 
subview = <UIView: 0xb87f510; frame = (0 0; 320 0); autoresize = W+H; layer = <CALayer: 0xb87f020>> 

任何想法?

回答

3

的关键是这部分中的日志输出:

autoresize = W+H; 

这是的UIView-autoresizingMask日志描述。检查文档here。 基本上,这是您描述在调整超级视图时子视图应该执行的操作的方式。它非常强大。

您的当前规则告诉子视图在调整超级视图的大小时调整宽度和高度,并将子视图上下的距离保持为静态(根据超视图坐标系)。由于子视图不是很高,并且您正在调整超级视图的大小,子视图会降至零高度,以尝试保持上方和下方的距离。

+0

修复它。谢谢!我从面具中删除了UIViewAutoresizingFlexibleHeight(通过界面生成器),它像一个魅力一样工作。谢谢! – bbrame

相关问题