具有双高状态栏的XCode Redraw纵向布局

时间:2011-05-27 15:29:54

标签: objective-c xcode orientation statusbar autoresize

我的应用程序中有几个屏幕出现此问题,但我会解释主屏幕会发生什么。希望解决方案不像我想的那样复杂。所以我的主屏幕顶部有一个标识,下面有一个标签(标题),下面有3个水平按钮,最后,如果是纵向,则分别在左下角和左下角设置和信息按钮。为了允许横向调整,调整大小的掩码无法实现我想要的外观,因此我实现了

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
使用if和else语句的

方法,“if”使用CGRectMakes绘制它们应该在横向布局中的所有元素,并且“else”在将其更改回纵向横向时将它们重新绘制回原始位置。一切都很好。我记得我们必须能够处理双高状态栏,所以我模拟它以查看它对我的应用程序会做什么。当我在主屏幕上并打开和关闭它时,项目的自动调整(设置为根据视图的顶部进行调整)可以很好地工作,通过略微压缩所有内容,而不是隐藏任何东西。我可以毫无问题地关闭它。

现在问题出在这里:

当我在另一个屏幕上打开双倍高状态栏时,然后返回我的主屏幕,调整大小不会发生,并根据我的坐标和大小重新绘制我的屏幕全尺寸我之前提到的方法,所以设置和信息按钮是从屏幕底部中间绘制的。如果已经打开了双高状态栏,则在主屏幕上从横向切换回纵向时也会发生相同的情况。

同样,我在另一个页面上的导航栏和标签栏之间有一个地图。当已经在页面上,并打开和关闭它时,一切都很好地调整大小(地图的框架改变高度,导航栏向下移动)。但是,当从不同的屏幕或横向切换到该屏幕时,我遇到了问题,因为不是适当地自动调整,地图视图和导航栏被部分地推到标签栏后面,模糊了google商标​​,这是地面申请拒绝。

对于长篇大论感到抱歉,但我想清楚地描述导致此问题的原因。任何想法都会非常感激,因为我真的不知道如何处理这个问题。

1 个答案:

答案 0 :(得分:0)

我一直在努力追踪这个问题。我认为这是因为自动调整遮罩仅在调整视图大小时使用,而不是在将新视图添加到场景时使用。

对我来说,我想要一个从笔尖加载的设置视图,并添加到其他所有内容之上。如果在添加视图时双高度条有效,它将从屏幕底部运行。要修复它,您必须在加载视图时自己设置视图的大小和位置。这是我工作的“转到设置”按钮背后的代码:

- (IBAction) settingsPressed:(id)_sender
{
    NSArray* a = [[NSBundle mainBundle] loadNibNamed:@"SettingsView" owner:self options:nil];
    SettingsView* settings = [a objectAtIndex:0];
    settings.frame = self.view.bounds;
    [[self view] addSubview:settings];
}

重要的一句是:

settings.frame = self.view.bounds;

它会出现,将其归类为“调整大小”,因此适用大小调整掩码规则。我后来为过渡添加了动画,它继续正常工作。

注意:此方法位于View Controller中。

相关问题