HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了旋转iOS后,子视图控制器高度为零大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在寻找,但找不到我遇到的这个问题的答案.这似乎是相当基础的,所以希望有人可以解释,或指向我以前的帖子.

将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后,子视图控制器高度为零所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。