0

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

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

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

viewController.view 的 frame = 0,0,320,276

将 viewController.view 的大小调整为 0,64,1024,704 后

一个subview卡在底部,效果基本和subview没有灵活的底边距一样。

352,434,320,270。大小合适,没有调整大小。但是从它的superview顶部向下434点,加上高度270,=704,即superview的高度。

我希望 270 子视图高度和 704 之间的 434 差异在顶部和底部边距之间保持平衡。

但是顶部和底部边距都被指定为调整大小。我很困惑。可能是我的代码盲了,这很容易。

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

po [viewController.view 子视图]

(id) $1 = 0x09696340 <__NSArrayM 0x9696340>(

< UIView: 0x9695790; 帧 = (0 0; 320 270); 自动调整大小 = LM+RM+TM+BM;层=<CALayer:0x96957f0>>

)

(lldb) po viewController.view

(UIView *) $2 = 0x09695ab0 < UIView: 0x9695ab0; 帧 = (0 0; 320 276); 自动调整大小 = W+H;层=<CALayer:0x9695b10>>

然后一行代码改变superview:

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

(lldb) po viewController.view

(UIView *) $3 = 0x09695ab0 < UIView: 0x9695ab0; 帧 = (0 64; 1024 704); 自动调整大小 = W+H;层=<CALayer:0x9695b10>>

(lldb) po [viewController.view 子视图]

(id) $4 = 0x09696340 <__NSArrayM 0x9696340>(

< UIView: 0x9695790; 帧=(352 434;320 270);自动调整大小 = LM+RM+TM+BM;层=<CALayer:0x96957f0>>

)

编辑-

问题可能是我不知道的另一个属性。也许像自动布局或约束之类的东西,但自动布局已关闭。此外,superview 不是自定义 UIView 子类,在 layoutSubviews 中有一些花哨的东西。这都是简单的 UIKit 东西。

4

1 回答 1

0

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

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

于 2017-10-26T07:16:26.600 回答