在“查看已加载”中我正在尝试确定视图的大小,以便我可以适当调整子视图的大小。无论方向如何,我希望它始终围绕屏幕的长度和宽度延伸。
quest *anview = [[quest alloc] initWithFrame: CGRectMake(50, 50, self.view.frame.size.width-100, self.view.frame.size.height-100)];
self.aquest=anview;
但是当我在风景中它应该返回相反时,它总是返回宽度748和高度1024。我知道你无法在模拟器上获得方向,但这也发生在设备上。当我得到方向时:
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
NSLog(@"device orientation:%d",orientation);
我正确地获得了方向,但无论方向如何,此日志语句都会返回748/1024。
NSLog(@"size w:%f",self.view.frame.size.width);
NSLog(@"size h:%f",self.view.frame.size.height);
任何人都知道发生了什么事吗?这与我将它放在viewdidLoad方法中有什么关系吗?我应该把它放在viewWillAppear还是viewDidAppear?
答案 0 :(得分:12)
尝试使用 bounds 属性而不是 frame 。
即使以横向方式启动应用程序,也始终以纵向模式创建视图,然后旋转视图。您应该能够通过将其大小相对于父级的纵向大小和自动化掩码设置为 UIViewAutoresizingMaskFlexibleWidth | UIViewAutoresizingFlexibleHeight 来保持子视图的延伸,提供 shouldAutorotateToInterfaceOrientation:返回YES为正确的设备方向。除非您为蒙版添加不同的 UIViewAutoresizingFlexibleMargin ,否则它还将保持距离上边距和左边距的距离。