如何在iOS 7中以编程方式隐藏状态栏?

37
中,我如何以编程方式隐藏 ? 我正在使用 XCode 4.6.1),我想在 XCode 中实现这一点。
12个回答

72

iOS7中,您应该在viewController中实现

- (BOOL)prefersStatusBarHidden {
    return YES;
}

33

你可以在plist中设置"View controller-based status bar appearance"为NO来隐藏状态栏,这是最简单的方法。

或者你可以使用UIApplication类的statusBarHidden属性在代码中进行隐藏。

[[UIApplication sharedApplication] setStatusBarHidden:YES];

Swift 3.0

在任何特定的视图控制器中隐藏状态栏

override var prefersStatusBarHidden: Bool {
    get {
        return true
    }
}

隐藏整个应用程序的状态栏

UIApplication.shared.isStatusBarHidden = true

并在项目的info.plist中将键值“View controller-based status bar appearance” 设置为NO。


6
无法在iOS 7上运行,正确答案由@user2826529提供。 - Vibhor Goyal
7
没问题。请确保您按照他在plist中提到的属性设置正确。 - groomsy
远为最佳解决方案。忘记上面的所有东西。苹果把它搞得太复杂了。 - Teddy
覆盖代码在iOS 13、Xcode 11.3和Swift 5中完美运行。UIApplication.shared.isStatusBarHidden已被弃用。 - Wayne Henderson

18
- (void)viewDidLoad
{
    [super viewDidLoad];
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)])
    {
        [self prefersStatusBarHidden];
        [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
    }
    else
    {
        // iOS 6
        [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
    }
}

// Add this method
- (BOOL)prefersStatusBarHidden {
    return YES;
}

它对我没有起作用。我使用了同样的方法,但状态栏总是显示。请帮忙... - Magesh
4
这段代码的作用是隐藏状态栏,使用了动画效果UIStatusBarAnimationSlide。同时,在info.plist文件中也有一个属性可以用来隐藏状态栏。 - user2826529
隐藏状态栏后,如何再次显示它?因为我想通过编程方式更改状态栏的可见状态。 - echo
不需要执行选择器。 - Andras Hatvani
@AndrasHatvani 这个问题指定了使用 Xcode 4,这意味着他没有 iOS 7 API。他使用 performSelector 来避免“找不到方法”的警告。 - zekel
@echo 如果你仍然需要这样做,请查看我的答案。 - zekel

5

View controller-based status bar appearance 设置为 NO 时,要隐藏特定的ViewController(然后再次显示),请按照以下步骤操作:

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
}

-(void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
}

3
如果您需要动态地在给定的视图控制器上隐藏/显示它,您可以像这样操作。
(虽然我建议只使用- (BOOL)prefersStatusBarHidden来返回您的偏好设置,如果您不需要更改它。)
// view controller header 
@interface MyViewController : UIViewController  {
    BOOL shouldHideStatusBar;
}
@end


@implementation

- (BOOL)prefersStatusBarHidden {
    return shouldHideStatusBar; // backed by your instance variable
}

- (void)setPrefersStatusBarHidden:(BOOL)hidden {
    shouldHideStatusBar = hidden;

    // Don't call this on iOS 6 or it will crash since the 
    // `setNeedsStatusBarAppearanceUpdate` method doesn't exist
    [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];

    // [self setNeedsStatusBarAppearanceUpdate]; // (if Xcode 5, use this)
}

@end

1

Swift 4.1

步骤1. 在你的info.plist中设置View controller-based status bar appearanceYES

步骤2.UIViewController中输入一些代码,当你呈现UIViewController时状态栏将会隐藏。

private var statusBarIsHidden = false

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    statusBarIsHidden = true
    setNeedsStatusBarAppearanceUpdate()
}
override var prefersStatusBarHidden: Bool {
    return statusBarStatus
}

1

如果 iOS >= 7.0,请使用以下代码:

语法:

// Present in UIViewController of UIKit Frameworks
- (BOOL)prefersStatusBarHidden NS_AVAILABLE_IOS(7_0); // Defaults to NO

使用方法:

- (BOOL)prefersStatusBarHidden {
    return YES;
}

在 iOS < 7.0 中使用以下代码:

Syntax:

// Present in UIApplication of UIKit Frameworks
- (void)setStatusBarHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation NS_AVAILABLE_IOS(3_2);

使用方法:

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];

0

我的经验是在iOS 9 / Xcode 7.3中,您需要在info.plist文件中同时包含代码和值。

将此添加到您的viewDidLoad方法中。

[[UIApplication sharedApplication] setStatusBarHidden:YES];

将以下代码作为布尔值添加到您的info.plist文件中,并将其设置为NO:
View controller-based status bar appearance

0
如果使用iOS 9.0+和Swift。如果您想在某些视图控制器中隐藏状态栏而不是全部 - 请确保在Info.plist中将View controller-based status bar appearance的值设置为YES,否则相同的参数将在所有视图控制器中使用。
并且在UIViewController子类中覆盖prefersStatusBarHidden
override var prefersStatusBarHidden: Bool {
    get {
        return true
    }
}

类似的方式也可以用来更改 preferredStatusBarStyle

override var preferredStatusBarStyle: UIStatusBarStyle {
    get {
        return .lightContent
    }
}

0

在Swift 4中:

    UIApplication.shared.isStatusBarHidden = ..true/false

'isStatusBarHidden' 的 Setter 在 iOS 9.0 中已被弃用:请使用 -[UIViewController prefersStatusBarHidden]。 - Abdullah Umer

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