Raf*_*eil 38 iphone frame uiview
在我的iPhone OS应用程序中,我希望(需要)观察设备方向的变化,以便重新排列屏幕的某些部分.我使用的方法是用来CGRect frame = [UIScreen mainScreen].applicationFrame
获取屏幕大小,并从那里计算其他控件的大小和/或位置(我也尝试过self.view.frame
).
所有测试都是在Portrait模式下完成的,所以我可以专注于编写主要功能,然后再对Landscape进行一些调整.这里输入问题:-(void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
我在继续之前添加了一些日志来检查大小,但显然宽度和高度的值是"错误的"(我说"错误",因为乍一看这些值对我来说没有意义) .
这是一些日志记录的输出:
Landscape中"w"和"h"的值似乎与我相反 - 我期待w = 480和h = 300.
我究竟做错了什么?我用来调试的代码如下.
-(void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
CGRect frame = [UIScreen mainScreen].applicationFrame;
CGSize size = frame.size;
NSLog(@"%@", [NSString stringWithFormat:@"Rotation: %s [w=%f, h=%f]",
UIInterfaceOrientationIsPortrait(self.interfaceOrientation) ? "Portrait" : "Landscape",
size.width, size.height]);
}
Run Code Online (Sandbox Code Playgroud)
Jas*_*oco 33
设备的方向发生了变化,而不是屏幕的物理特性.你基本上把它放在一边,但实际上它是320像素宽(其中20个在状态栏显示后暂时无法使用)和480像素高.如果您的视图是自动旋转的,则已为您平移了宽度/高度,但是当您询问屏幕的实际尺寸时,您将获得屏幕的实际尺寸.
这也是为什么在处理翻译后的视图时,重要的是根据视图的中心和视图的边界进行计算,而不要在视图的框架上进行计算.
小智 18
我一直在绊倒同样的问题,并且通过一些诊断工作,我发现视图的边界和框架不能准确地反映横向方向viewDidLoad
(当视图控制器被推入堆栈时设备被保持在横向中),但是在viewWillAppear:
和中正确地这样做viewDidAppear:
.我只是提出我的代码所需要的帧/边界的尺寸从viewDidLoad
到viewWillAppear:
,和它的工作正常.
归档时间: |
|
查看次数: |
35993 次 |
最近记录: |