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>> 

有什么想法吗?

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

 autoresize = W+H; 

这是UIView -autoresizingMask的日志描述。 在这里检查文档。 基本上,这是你描述什么子视图应该做的时候superviewresize的方式。 这是非常强大的。

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