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的日志描述。在这里查看文档。基本上,这是你描述父视图调整大小时子视图应该做什么的方式。这是非常强大的。

你当前的规则告诉子视图在父视图调整大小时调整宽度和高度,并保持子视图上下的距离是静态的(根据父视图坐标系)。因为子视图不是很高,而且你在调整父视图的大小,所以子视图的高度降为零,以保持上下距离。

最新更新