大佬教程收集整理的这篇文章主要介绍了旋转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,请注明来意。