UIView调整子视图的大小

时间:2013-04-18 19:28:19

标签: iphone ios 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>>

有什么想法?

1 个答案:

答案 0 :(得分:3)

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

autoresize = W+H;

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

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