【问题标题】:XCode Redraw portrait layout with double high status barXCode 重绘纵向布局,带有双高状态栏
【发布时间】:2011-09-03 12:15:18
【问题描述】:

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

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

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

问题来了:

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

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

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

【问题讨论】:

    标签: objective-c xcode orientation statusbar autoresize


    【解决方案1】:

    我一直在尝试自己找出这个问题。我认为这是因为仅在调整视图大小时才使用自动调整大小掩码,而不是在将新视图添加到场景时使用。

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

    - (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;
    

    它会显示为“调整大小”,因此适用调整大小掩码规则。后来我为过渡添加了动画,它仍然可以正常工作。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多