iOS - 如何在使用半透明黑色状态栏时重新获取Storyboard顶部的20像素区域

3

我有一个问题,状态栏后面的20像素出了问题,具体来说,我不能在那里放任何东西。

当我创建UI时,使用故事板方法,并将状态栏样式设置为半透明黑色。但是当我在Xcode中进行布局时,我的视图高度被固定为460px(灰色)。

请帮忙解决。


从朋友那里得到了答案,他发布答案后我会将其标记为正确答案。 现在这是解决方案:

  1. 在接口构建器中将视图控制器设置为全屏和自由格式大小:http://cl.ly/0x1p1u3q3B1y3b3C3U2n
  2. 然后在视图的大小设置中将其高度设置为480px:http://cl.ly/1p1b0e060p1Y37393D08
  3. 确保在Info.plist中状态栏样式为半透明黑色:http://cl.ly/153Y391S1b0G3J3z3Y1O
  4. 获得满意的结果:http://cl.ly/0Q1M390i3A3h2F3u2T19

你的意思是想要(1)将视图放在状态栏下面,以便它们可以透过状态栏显示出来,还是(2)让状态栏消失并用你的应用程序填充屏幕的480像素高度?我认为(1)是不可能的,即使“半透明”意味着它对某些东西是半透明的。 - Cowirrie
这是第一个选项...而且很可能,我的朋友已经帮我解决了它的问题。等待他将他的解决方案发布到这里以便给他信用。 - Ivan Karpan
4个回答

7

下面是不需要一行代码的解决方案。

  1. 在Interface Builder中将视图控制器设置为全屏和自由形式大小。
  2. 在视图的尺寸设置中,将其高度设置为480px。
  3. 确保Info.plist中的状态栏样式为半透明黑色。
  4. 启动并观察。

请参见顶部帖子中每个步骤的截图链接。


2

好的,被告知可以这样做后,我尝试将一个视图放在主视图上方,并将其y坐标设置为-20。然后我去到Info.plist并将状态栏样式设置为透明黑色样式(0.5的alpha值)。我放置的视图在状态栏下面可见。

enter image description here

这只发生在运行时;在界面构建器中,模拟的半透明状态栏是灰色但不透明的。

编辑:如果你想将你的视图控制器的主视图放入此空间,可以在viewWillAppear期间进行。(如果你尝试在viewDidLoad期间移动它,之后它会被移回去。)

- (void)viewWillAppear:(BOOL)animated;
{
    [super viewWillAppear:animated];

    // Move the main view upwards if it isn't already there.
    CGRect frame = [[self view] frame];
    frame.size.height += frame.origin.y;
    frame.origin.y = 0;
    [[self view] setFrame:frame];
}

然而,在旋转后,它会被移回来,如果我在UITableView上这样做,我的旋转响应尝试最终破坏了单元格布局。

这里是Swift版本。看起来可以工作。对于拍摄App Store截图的好解决方案(除了进行info.plist更改之外)。

override func viewWillAppear(animated: Bool) {

    super.viewWillAppear(animated)

    // Move the main view upwards if it isn't already there.
    var frame: CGRect = self.view.frame
    frame.size.height += frame.origin.y
    frame.origin.y = 0
    self.view.frame = frame
}

如果我在故事板中有一个UITableViewController并且想要其中的单元格是静态的,那么这不是我真正能做到的事情。 - Ivan Karpan
非常感谢您的输入。我提到的解决方案实际上可以避免任何编码,并且可以得到完美的结果。我将在我的问题中更新它,并等待他在这里发布,以便我可以将其标记为答案。 - Ivan Karpan

1

只需在界面构建器中将 Y 坐标设为负数 (-20)。


-1

尝试在接口生成器的属性检查器中,在“模拟度量”部分更改“状态栏”的值。如果将其设置为“Inferred”,Xcode将不会对视图控制器做出任何假设,从而允许您将视图的大小设置为任何您想要的大小(即使这些大小没有任何意义)。查看有关状态栏的此篇文章,了解有关在应用程序中隐藏它的信息。


嗨,更改模拟器视图的模拟参数对模拟结果没有影响。 - Ivan Karpan
修改这些值只会在界面生成器中隐藏状态栏。您还需要像我在链接的帖子中讨论的那样使用 setStatusBarHidden:... - samson
目标不是隐藏状态栏,而是以半透明黑色样式呈现在屏幕上,并能在其下方放置一些内容。 - Ivan Karpan
我明白了。我可以问一下,你为什么想这样做呢?在我看来,这有点别扭... - samson
举个例子,看看照片应用程序如何处理查看图片。当您点击照片视图时,您会得到半透明的控件,其中包括状态栏,您仍然可以浏览所有这些控件。 - Ivan Karpan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接