在iPad上的ViewController.m
, ,如果我们在点击事件处理程序中打印出视图的帧高:
NSLog(@"Height of main view is %f", self.view.frame.size.height);
然后在纵向模式下,值为1004(设备状态行为20像素,因此1024 - 20 = 1004),如果设备旋转到横向模式,我预计它大约是768或748,但是打印的值实际上是1024. (更新:如果应用程序在横向模式下启动,然后没有旋转,它也打印为1024)。为什么会这样,并且有一个经验法则是期望获得748或768的价值? (有多种方法可以实现吗?)
答案 0 :(得分:4)
在Apple的文档中,关于UIView的框架:
警告:如果transform属性不是identity变换,那么 此属性的值未定义,因此应忽略。
所以你应该使用 bounds 属性。
答案 1 :(得分:1)
您可以编程方式管理方向,并覆盖willRotateToInterfaceOrientation方法。见道:
#define IPAD_SIZE_PORTRAIT CGSizeMake(768, 960)
#define IPAD_SIZE_LANDSCAPE CGSizeMake(1024, 704)
-(void)relayoutSubviews:(UIInterfaceOrientation)orientation
{
CGSize scrSize;
if ((orientation == UIInterfaceOrientationLandscapeLeft) || (orientation == UIInterfaceOrientationLandscapeRight))
{
scrSize = IPAD_SIZE_LANDSCAPE;
}
else
{
scrSize = IPAD_SIZE_PORTRAIT;
}
self.view.bounds = CGRectMake(0, 0, scrSize.width, scrSize.height);
self.view.frame = CGRectMake(0, 0, scrSize.width, scrSize.height);
}
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
[self relayoutSubviews:toInterfaceOrientation];
}
答案 2 :(得分:0)
这背后的原因是当您旋转设备时,视图的框架会更改以适应状态栏,但实际上不会旋转视图的框架。设备只是将视图渲染为旋转状态,而视图实际上未旋转。我认为子视图会受到此更改的影响,但整体视图不会。