旋转iOS后,子视图控制器高度为零

旋转iOS后,子视图控制器高度为零,第1张

概述我一直在寻找,但找不到我遇到的这个问题的答案.这似乎是相当基础的,所以希望有人可以解释,或指向我以前的帖子. 将viewcontroller的视图添加为另一个viewcontroller的子视图时,我发现子视图的height属性在旋转时变为零.宽度也趋于增加. 例如,将NSDChildViewController的视图设置为xib文件中的50×100 … @implementation Paren 我一直在寻找,但找不到我遇到的这个问题的答案.这似乎是相当基础的,所以希望有人可以解释,或指向我以前的帖子.

将vIEwcontroller的视图添加为另一个vIEwcontroller的子视图时,我发现子视图的height属性在旋转时变为零.宽度也趋于增加.

例如,将NSDChildVIEwController的视图设置为xib文件中的50×100 …

@implementation ParentVIEwController-(voID)vIEwDIDLoad{  [super vIEwDIDLoad];  mChild = [[ChildVIEwController alloc] initWithNibname:nil                                                  bundle:nil];  [self.vIEw addSubvIEw:mChild.vIEw];}-(voID)vIEwDIDLayoutSubvIEws{    [super vIEwDIDLayoutSubvIEws];    [mChild printFrame];}@end@implementation ChildVIEwController-(voID)printFrame{    NSLog(@"%s %@",__FUNCTION__,NsstringFromCGRect(self.vIEw.frame));}@end

各个方向肖像 – > landscape->肖像的记录如下:

– [ChildVIEwController printFrame] {{0,0},{50,100}}

– [ChildVIEwController printFrame] {{0,{298,0}}

– [ChildVIEwController printFrame] {{0,248}}

为什么会发生这种情况,我该如何预防呢?目前,在尝试以编程方式将vIEwcontrollers布局为子视图时,这会给我带来麻烦.到目前为止,我发现的唯一解决方案是使用类似的东西强制将size属性恢复为50×100 …

-(voID)forceSize{    CGRect frame = self.vIEw.frame;    frame.size.wIDth=50;    frame.size.height=100;    self.vIEw.frame=frame;}

但上面看起来很荒谬.任何帮助赞赏.

解决方法 您的父视图在其帧更改时自动调整其子视图的大小.在这种情况下,当设备在纵向和横向模式之间切换时,父视图的框架正在更改.

您似乎正在使用4英寸iPhone设备(或模拟器)进行测试,因此我们正在使用的尺寸为:320 x 568.父视图占用了屏幕的整个宽度和高度.

这是发生了什么:

在从纵向旋转到横向之前:

wIDthDifference = parentVIEwWIDth - originalChildVIEwWIDth      // 270 (320 - 50)heightDifference = parentVIEwHeight - originalChildVIEwHeight   // 468 (568 - 100)

从纵向旋转到横向后:

childLandscapeVIEwWIDth = parentVIEwHeight - wIDthDifference    // 298 (568 - 270)childLandscapeVIEwHeight = parentVIEwWIDth - heightDifference   // -148 (320 - 468)    // (but height cannot be < 0,so this is automatically set to 0)

因此在横向模式下,我们最终得到子视图的宽度= 298和高度= 0

在从横向旋转到纵向之前:

wIDthDifference = parentVIEwWIDth - childLandscapeVIEwWIDth     // 270 (568 - 298)heightDifference = parentVIEwHeight - childLandscapeVIEwHeight  // 320 (320 - 0)

从横向到纵向旋转后:

childPortraitVIEwWIDth = parentVIEwWIDth - wIDthDifference      // 50 (320 - 270)childPortraitVIEwHeight = parentVIEwHeight - heightDifference   // 248 (568 - 320)

最终我们得到了子视图的宽度= 50和高度= 248

所以,要停止这种疯狂,请将父视图(which is YES by default)上的autoresizesSubvIEws设置为NO,如下所示:

- (voID)vIEwDIDLoad{    [super vIEwDIDLoad];    self.vIEw.autoresizesSubvIEws = NO;    ...}
总结

以上是内存溢出为你收集整理的旋转iOS后,子视图控制器高度为零全部内容,希望文章能够帮你解决旋转iOS后,子视图控制器高度为零所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1042914.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存