0

是否可以检索 UIView 在横向模式下的框架,而设备/界面处于纵向模式?如果是这样,这是如何完成的?

4

3 回答 3

1

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

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

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

于 2011-05-09T14:52:04.903 回答
0

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

为什么你甚至需要这个?通常,您应该只响应您在 UIViewControllerwillRotateToInterfaceOrientation:duration:或 UIView中给出的大小layoutSubviews

于 2011-05-10T01:23:38.977 回答
0

我不知道这样做的可靠方法。在我使用的一个项目中UIApplicationWillChangeStatusBarOrientationNotification。根据视图是否被另一个视图覆盖(也可能存在其他破坏情况),查询视图的其中一个frame或属性会返回不一致的结果。bounds也许方法内部的情况不同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 加载视图框架后找出它。然后,要么推断框架将在横向方向上是什么,要么在 Interface Builder 中显式设置框架并在两个方向的代码中复制它。

于 2011-05-16T11:36:56.857 回答