2

我在我的应用程序中遇到了多个屏幕的问题,但我会解释我的主屏幕会发生什么。希望解决方案没有我想象的那么复杂。所以我的主屏幕顶部有一个标志,下面有一个标签(标题),下面有3个水平按钮,最后,如果是纵向,左下角和右下角分别有设置和信息按钮。为了允许横向,调整蒙版大小无法达到我想要的外观,所以我实现了

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

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

现在问题来了:

当我在另一个屏幕上打开双高状态栏时,然后返回我的主屏幕,调整大小不会发生,它会根据我在方法中拥有的坐标和大小重新绘制我的屏幕全尺寸前面提到过,因此设置和信息按钮绘制在屏幕底部的一半处。在双高状态栏已打开的主屏幕上从横向切换回纵向时也会发生同样的情况。

同样,我在另一个页面上的导航栏和标签栏之间有一张地图。当已经在页面上并打开和关闭它时,一切都很好地调整了大小(地图的框架改变了高度,导航栏向下移动)。但同样,从其他屏幕或横向切换到该屏幕时我遇到了问题,因为地图视图和导航栏没有适当地自动调整大小,而是被部分推到标签栏后面,从而掩盖了作为理由的谷歌商标应用拒绝。

抱歉啰嗦了,但我想清楚地描述是什么情况导致了这个问题。任何想法都将不胜感激,因为我真的不知道如何解决这个问题。

4

1 回答 1

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;

看起来,它被归类为“调整大小”,因此适用调整大小掩码规则。后来我为过渡添加了动画,它继续工作得很好。

注意:此方法在视图控制器中。

于 2011-10-09T16:05:27.900 回答