gpt4 book ai didi

iphone - 在 iOS 上隐藏状态栏的正确方法,带有动画和调整 Root View 的大小

转载 作者:IT王子 更新时间:2023-10-29 07:45:57 30 4
gpt4 key购买 nike

考虑一个 View Controller ,它需要在单击按钮时滑出(或隐藏)状态栏。

- (void) buttonClick:(id)sender
{
[[UIApplication sharedApplication] setStatusBarHidden:YES
withAnimation:UIStatusBarAnimationSlide];
}

上面有效地隐藏了状态栏,但没有适本地调整 Root View 的大小,在顶部留下 20 像素的间隙。

我期望的是 Root View 扩展到状态栏之前使用的空间(动画,持续时间与状态栏动画相同)。

这样做的正确方法是什么?

(我知道有很多类似的问题,但我找不到任何关于按需隐藏状态栏而不是隐藏它以显示新 View Controller 的问题)

“蛮力”方法

显然,下面的工作......

[[UIApplication sharedApplication] setStatusBarHidden:YES
withAnimation:UIStatusBarAnimationSlide];
[UIView animateWithDuration:0.25 animations:^{
CGRect frame = self.view.frame;
frame.origin.y -= 20;
frame.size.height += 20;
self.view.frame = frame;
}];

...但有缺点:

  • 硬编码幻灯片动画的持续时间
  • 硬编码状态栏的高度
  • Root View 原点保持在 (0,-20)。我希望我的帧尽可能从 (0,0) 开始。

我已经尝试过的

  • 确保 Root View 的自动调整大小掩码具有 UIViewAutoresizingFlexibleTopMarginUIViewAutoresizingFlexibleHeight
  • 隐藏状态栏后调用了[self.view setNeedsLayout]
  • 隐藏状态栏后调用了[self.view setNeedsDisplay]
  • 在隐藏状态栏前后设置wantsFullScreenLayoutYES

最佳答案

对于那些试图通过基于 View Controller 的状态栏外观来实现这一点的人,您需要在 View Controller 中实现 prefersStatusBarHidden 方法

 - (BOOL)prefersStatusBarHidden
{
// If self.statusBarHidden is TRUE, return YES. If FALSE, return NO.
return (self.statusBarHidden) ? YES : NO;
}

然后,在您的按钮点击方法中:

- (void) buttonClick:(id)sender
{
// Switch BOOL value
self.statusBarHidden = (self.statusBarHidden) ? NO : YES;

// Update the status bar
[UIView animateWithDuration:0.25 animations:^{
[self setNeedsStatusBarAppearanceUpdate];
}];
}

要设置动画样式,您可以使用:

-(UIStatusBarAnimation)preferredStatusBarUpdateAnimation
{
return UIStatusBarAnimationSlide;
}

自定义样式:

- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}

关于iphone - 在 iOS 上隐藏状态栏的正确方法,带有动画和调整 Root View 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13624695/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com