在纵向模式下的风景框

时间:2011-05-05 09:36:06

标签: ios orientation cgrect

在设备/界面处于纵向模式时,是否可以检索UIView在横向模式下的帧?如果是这样,这是怎么做到的?

3 个答案:

答案 0 :(得分:1)

MrThys,你应该知道你的观点应该如何,无论是纵向还是横向模式。之后,您可以将它们定义为常量,如下所示:

#define myViewPortrait CGRectMake(0.0f, 0.0f, 768.0f,1024.0f)
#define myViewLandscape CGRectMake(0.0f, 0.0f, 1024.0f,768.0f)

然后,您可以在设备更改方向时使用这些值。 :)

答案 1 :(得分:0)

不是真的。您知道屏幕的尺寸只会交换宽度和高度。但是如果状态栏是可见的,则可用区域将是不同的(例如,纵向为320x460,而iPhone上的横向为300x480),然后如果您使用的是UINavigationController或类似设备,则必须将其镀铬考虑在内,然后,如果您的视图不是容器视图控制器中视图控制器的顶级视图,则必须考虑各种自动调整蒙版和任何自定义布局代码。

为什么你甚至需要这个?你通常只应该回答你在UIViewController的willRotateToInterfaceOrientation:duration:或UIView的layoutSubviews中给出的大小。

答案 2 :(得分:0)

我不知道这样做的可靠方法。在我的一个项目中,我使用了UIApplicationWillChangeStatusBarOrientationNotification。查询视图的framebounds属性会返回不一致的结果,具体取决于视图是否被另一个视图覆盖(可能还有其他中断情况)。也许willRotateToInterfaceOrientation:方法中的情况不同。

就我而言,我最终实现了自己的方法来找出视图边界:

- (CGSize)currentViewSizeWithOrientation:(UIInterfaceOrientation)orient
{
  CGSize size = self.currentView.bounds.size;
  CGSize result;

  if (UIInterfaceOrientationIsPortrait(orient))
    result = CGSizeMake(fminf(size.width, size.height),
                        fmaxf(size.width, size.height));
  else
    result = CGSizeMake(fmaxf(size.width, size.height),
                        fminf(size.width, size.height));
  return result;
}

在您的情况下,您可以尝试在从Nib加载后查找视图框。然后,要么推导出横向方向的帧,要么在界面生成器中显式设置框架,并在两个方向的代码中复制它。

相关问题