如何在设置setStatusBarHidden:Yes后将顶部位置设置为0?

12

我发现在设置了

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO]

viewDidLoad 中,如果我想将一个图像和顶部对齐,那么我需要将它的位置设置为 .y = -20;

有没有办法使得图像的 y 坐标的 顶部位置 等于 0?或者在隐藏状态栏后,它注定要是 -20 吗?

谢谢阅读。

6个回答

11

我曾经遇到过类似的问题,这段代码解决了我的问题:

[viewController.view setFrame: [viewController.view bounds]];

4
[self.view setFrame: [self.view bounds]]; <== 我放了这个 :) - Unreality
5
对于我来说,正确使用view.bounds可以将视图正确移动到0,0位置,但仍会在底部留下20像素的空白(因为我的视图背景色不是白色)。这个方法可行:[self.view setFrame:[[UIScreen mainScreen] bounds]]; - Brian Moeskau
4
这个回答根本没有意义。很明显,你最终会在视野底部留下20分的差距。可以有人把它作为正确答案删除吗? - Benjamin Dobell

4
贾斯汀·加拉格尔的解决方案基本正确,但有一个主要副作用。
隐藏状态栏,然后将视图的框架设置为自身边界,在当前方向上会起作用。但是旋转会很丑陋。例如,如果您处于纵向模式,则将设备旋转到横向模式将导致整个视图框架向右移动256个点,屏幕上留下大片黑色空间。
bmoeskau在上面的评论中提出的另一个副作用的解决方案避免了这个问题。
[self.view setFrame: [[UIScreen mainScreen] bounds]];

3
我想如果你想从一开始就移除状态栏,你应该在Info.plist中添加一个UIStatusBarHidden项目。

Discussion@apple.com

你也可以尝试将自动调整大小设置为垂直(和水平)重新调整大小。
在InterfaceBuilder中,参见添加文本视图这里的示例,了解要单击的内容。
引用:

单击内部框中的水平和垂直线,使它们变成实心红线。动画预览显示文本视图的内部尺寸将随窗口而增长和缩小。


非常感谢您的回复,但对我没有任何帮助。将它设置为YES/true仍然无法移除状态栏...然后我发现代码运行正常,而不是添加这个键。我想我一定做错了什么。 - Unreality

2

请检查你nib文件中根视图的大小是否正确设置为480x320。一些模板项目会将其设置为460x320以适应状态栏。如果你加载了一个占据整个屏幕并且状态栏被隐藏的视图,它应该可以正常工作,你不需要进行任何特殊处理。


谢谢您的回复,我已经将其设置为480x320,但是之后顶部留下了20像素的白色空间。 - Unreality

0

以下解决方案在以下情况下都能正常工作:

  • iOS 6和iOS 7均可使用
  • 用于隐藏和显示状态栏
  • 支持纵向和横向屏幕方向
  • 即使通话状态栏可见也可以使用

在您的视图控制器中,添加以下内容:
- (BOOL)prefersStatusBarHidden  // For iOS 7.0 or above.
{
    return _isStatusBarHidden;
}

// Call this method to show / hide the status bar and resize the view.
- (void)setStatusBarHidden:(BOOL)isStatusBarHidden
{
    _isStatusBarHidden = isStatusBarHidden;

    // For iOS 7.0 or above...
    if([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)])
    {
        // Update status bar visibility.
        [self setNeedsStatusBarAppearanceUpdate];   // Tell the view controller that the return value of -prefersStatusBarHidden has changed.
    }
    // Otherwise...
    else
    {
        // Show or hide status bar.
        [[UIApplication sharedApplication] setStatusBarHidden:_isStatusBarHidden withAnimation:UIStatusBarAnimationNone];

        // Resize view.
        self.view.frame = [UIScreen mainScreen].applicationFrame;
    }
}

在这里,BOOL _isStatusBarHidden;是视图控制器类的成员变量。

备注:


0
如果您在视图中嵌套了一个滚动视图,请确保也进行更改。这段代码解决了我所有的问题。
[self.view setFrame: [self.view bounds]];
[self.theScroller setFrame: [self.view bounds]];

"

"theScroller" 是我的 ScrollView 的名称。

"

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