如何布局其框架取决于方向的视图

时间:2011-08-13 16:39:04

标签: iphone ios ipad

考虑一个必须与屏幕底部对齐并且其宽度必须填满屏幕的视图。

此外,视图的高度取决于方向。在纵向方向上,视图的高度必须为200px,在横向中,高度必须为100px。

在不假设父视图大小的情况下执行此操作的最佳方法是什么(即:不知道它是否有状态栏,可能还有标签栏等)?

这是我当前的代码,不起作用:

- (void)viewDidLoad
{
    [super viewDidLoad];
    myView = [[UIView alloc] init];
    CGSize myViewSize = CGSizeMake(self.view.frame.size.width, 200);
    // Align bottom
    float myViewY = self.view.frame.origin.y + self.view.frame.size.height - myViewSize.height;
    myView.frame = CGRectMake(0, myViewY, myViewSize.width, myViewSize.height);
    myView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin;
    myView.backgroundColor = [UIColor redColor];
    [self.view addSubview:myView];
}


- (void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    [super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
    BOOL landscape = UIInterfaceOrientationIsLandscape(toInterfaceOrientation);
    myView.frame = CGRectMake(myView.frame.origin.x, myView.frame.origin.y, myView.frame.size.width, landscape ? 100 : 200);
}

1 个答案:

答案 0 :(得分:0)

尝试使用UIWindow对象,如下所示:

[[UIApplication sharedApplication] keyWindow].screen.applicationFrame.size.height

applicationFrame的Apple文档内容如下:

此属性包含屏幕边界减去状态栏占用的区域(如果可见)。使用此属性是检索应用程序初始窗口大小的推荐方法。矩形以点

指定