【问题标题】:UIView resizes subviewUIView 调整子视图的大小
【发布时间】:2013-04-12 01:42:56
【问题描述】:

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

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

有什么想法吗?

【问题讨论】:

    标签: iphone ios uiview


    【解决方案1】:

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

    autoresize = W+H;
    

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

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

    【讨论】:

    • 修复了它。谢谢!我从掩码中删除了 UIViewAutoresizingFlexibleHeight(通过界面生成器),它就像一个魅力。谢谢!
    猜你喜欢
    • 2014-09-02
    • 2012-08-28
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多