iPhone:UIStatusBar半透明黑色与视图布局问题

3
我在状态栏方面遇到了一些问题。这是一个iPhone应用程序,而不是iPad应用程序。我希望在整个应用程序中都有一个黑色半透明的状态栏。
我已经在应用程序的plist中设置了状态栏样式。它被设置为黑色半透明。
我的理解是,当此设置被设置时,所有视图的布局将从0,0开始,而不是像不透明状态栏时那样从0,20开始。这就是为什么IB会给你指定一个提示,告诉它你将使用哪种类型的状态栏,以便它可以模拟并在IB中正确显示它。(是的,我在IB中所有的视图都设置为显示黑色半透明的状态栏)。布局是从0,0开始的,这样状态栏就可以覆盖你的视图以显示其中的内容。在IB中它工作得很好。但在我的应用程序中它却不行。
我的应用程序是基于选项卡的应用程序,尽管它们都设置了相同的内容,但只有一个视图看起来正确。而为了使那个视图正常工作,我必须将背景视图图像设置为0,-20,并将主视图设置为不剪切子视图。因此,似乎黑色半透明布局没有正常工作。此外,我所有其他选项卡视图都以相同的方式设置,不剪切子视图,并将主背景视图设置为0,-20。但只有在第一个选项卡中才实际“起作用”。
以下是一些图片:
应该是这样的(但仍需要将背景设置为0,-20):This is how it should look 另一个选项卡,具有完全相同的设置,看起来像这样:bad another tab 为了确保它是没有重叠背景的黑色半透明状态栏,我尝试了没有背景:no background

并提供另一种背景(备选是纯蓝色而不是轻微的刷状效果):alternative background

因为所有三个不工作示例(无背景,实际和替代)上的状态栏看起来完全相同,我认为状态栏是正确的排序,黑色半透明,但没有任何东西在它后面显示。

我的几个选项卡都有这个问题,并且所有循环浏览选项卡中的视图都有这个问题。它们都设置为与“工作”选项卡相同,“剪辑子视图”设置为NO,背景的原点设置为0,-20

我认为“工作”的那个并没有工作,只是由于背景视图中的负偏移而看起来像是。我认为它实际上应该设置为0,0并工作。但是主要的IB提供的视图其原点设置为0,20,所以我不能更改它。

此外,我在一个选项卡上有另一个问题,即设置选项卡,我使用不同的外观(更像iPhone),但黑色半透明效果甚至没有生效。我从编程构建的视图开始,它显示灰色状态栏:settings programmatically constructed 并且深入到支持nib的视图中,它们看起来相同:settings nib backed 视图的布局就好像是灰色状态栏一样,向下20像素(尽管它们在IB中被设置为黑色半透明,所以我将它们布置得更高了20像素)
我已经尝试通过编程方式设置状态栏样式,并在应用程序plist条目中添加,但没有任何效果(对于这些选项卡中的任何一个都没有效果)。
我已经在Google、stackoverflow和apple.com上进行了几周的研究,但没有发现我应该做什么的迹象。

预计完成时间: wantsFullScreenLayout 解决了其中一个问题,因此我将其标记为已解决。我已经开了一个新的问题,更新了原本提出的两个问题之一的问题,附有新的图片、描述等,并更改了适用的标题,因为问题不在于 uistatusbar 本身。新问题位于 new problem

1个回答

4
“我的理解是,当设置了这个属性时,所有视图的布局都将从0,0开始,而不是像有不透明状态栏时一样从0,20开始。”
“你是从哪里得到这个信息的?应用程序窗口的框架将保持原样, 默认情况下它在(0,0)处,并将保持不变 - 它不关心状态栏的外观。”
“现在,视图控制器的视图则不同。默认情况下,它们的框架被设置为UIScreenapplicationFrame属性(换句话说,屏幕边界减去状态栏占用的区域)。这就是为什么你无法在半透明状态栏后面显示背景颜色的原因。”
“尝试将每个组成选项卡栏的视图控制器的wantsFullScreenLayout属性设置为YES。这将使框架上移至(0,0),正如你需要的那样。”

好的,谢谢。我不知道我从哪里得到的(你引用的错误信念)。可能是将我读过的某些东西与观察到的行为混合在一起,得出了错误的结论。 - chadbag
然而,我仍然有同样的问题。MainWindow.xib中有一个选项卡控制器,其中包含5个导航控制器作为选项卡。我在IB中将每个设置为wantsFullScreenLayout。每个都有一个视图控制器,我还在IB中为每个设置了wantsFullScreenLayout。我将我的背景图像设置为每个视图控制器的0,0 320w 480h。第一个选项卡仍然看起来正确,其他选项卡在状态栏下面没有任何东西,因此它们在状态栏下面仍然是透明黑色覆盖白色,而不是我的背景。 (各种视图内容如预期的那样向上移动了20像素) - chadbag
顺便说一下,我的第二个问题在设置选项卡上已经完全解决了,使用了wantsFullScreenLayout。每次pushViewController时以编程方式完成:谢谢! - chadbag
你真的需要展示一些代码。否则,我恐怕我的帮助范围有限。 - MiguelB
你想看哪段代码?所有的代码都在 nib 文件中。没有任何布局相关的代码。在 app delegate 中,我加入了 [[self window] setRootViewController:[self tabBarController]];(是的,我有点老派),其中 tab bar controller 在 MainWindow.xib 中。所有的 VC 都没有在它们的 viewDidLoadviewWillAppear: 中写任何布局代码。这就是为什么我感到困惑的原因。 - chadbag
显示剩余2条评论

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