在设备/界面处于纵向模式时,是否可以检索UIView在横向模式下的帧?如果是这样,这是怎么做到的?
答案 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
。查询视图的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加载后查找视图框。然后,要么推导出横向方向的帧,要么在界面生成器中显式设置框架,并在两个方向的代码中复制它。