0

我遇到了奇怪的调整大小行为。

当我调整 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>>

有什么想法吗?

4

1 回答 1

3

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

autoresize = W+H;

这是 .log 的日志描述UIView -autoresizingMask在此处查看文档。基本上,这是您描述在调整超级视图大小时子视图应该做什么的方式。它非常强大。

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

于 2013-04-18T19:35:48.097 回答