希望以下内容提供所需的一切。
根据我对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。
答案 0 :(得分:0)
您正在尝试从笔尖添加视图。因此,根据我的观点,当应用程序启动时,nib会首先执行。目前,您的视图不包含设备或超级视图的实际大小。因此,当应用程序启动时,它将占用您定义的实际大小,并且它将添加初始大小的子视图。
所以,我的建议是在ViewWillAppear()或ViewDidAppear()中添加视图,因为此时获取设备的实际大小,您将获得适当的视图大小和位置。