如何解决UIView autoresizingMask设置正确但不解决?

时间:2013-01-07 01:10:25

标签: ios uikit autoresizingmask

希望以下内容提供所需的一切。

根据我对autoresizingMask的期望,在我的应用程序中有一行调整父视图的框架,并且受影响的子视图没有以适当的方式响应。

viewController.view子视图有1个子视图,所有边距调整大小,框架为0,0,320,270。

viewController.view具有frame = 0,0,320,276

将viewController.view调整为0,64,1024,704

之后

一个子视图停留在底部,基本上与子视图中没有灵活的底部边距的效果相同。

352434320270。适当的尺寸,它没有调整大小。但是从超级视图的顶部向下434点,再加上高度270,= 704,超视距的高度。

我预计270个子视图高度和704之间的434差异在顶部和底部边缘之间保持平衡。

但是指定了顶部和底部边距以调整大小。我很困惑。可能是我已经失去了密码,这很容易。

当保证金为零时,这可能与某些特殊处理有关,但另一个保证金不为零。以前从未尝试过那种情况。

  

po [viewController.view subviews]

     

(id)$ 1 = 0x09696340< __ NSArrayM 0x9696340>(

     

< UIView:0x9695790; frame =(0 0; 320 270); autoresize = LM + RM + TM + BM;   layer =< CALayer:0x96957f0>>

     

     

(lldb)po viewController.view

     

(UIView *)$ 2 = 0x09695ab0< UIView:0x9695ab0; frame =(0 0; 320 276);   autoresize = W + H; layer =< CALayer:0x9695b10>>

然后用一行代码更改超级视图:

viewController.view.frame = {...};
  

(lldb)po viewController.view

     

(UIView *)$ 3 = 0x09695ab0< UIView:0x9695ab0; frame =(0 64; 1024   704); autoresize = W + H; layer =< CALayer:0x9695b10>>

     

(lldb)po [viewController.view subviews]

     

(id)$ 4 = 0x09696340< __ NSArrayM 0x9696340>(

     

< UIView:0x9695790; frame =(352 434; 320 270); autoresize =   LM + RM + TM + BM; layer =< CALayer:0x96957f0>>

     

编辑 -

问题可能是另一个我不知道的属性。也许类似于autolayout或约束,但autolayout已关闭。此外,superview不是一个自定义的UIView子类,在layoutSubviews中有一些奇特的东西。这都是普通的UIKit。

1 个答案:

答案 0 :(得分:0)

您正在尝试从笔尖添加视图。因此,根据我的观点,当应用程序启动时,nib会首先执行。目前,您的视图不包含设备或超级视图的实际大小。因此,当应用程序启动时,它将占用您定义的实际大小,并且它将添加初始大小的子视图。

所以,我的建议是在ViewWillAppear()或ViewDidAppear()中添加视图,因为此时获取设备的实际大小,您将获得适当的视图大小和位置。

相关问题