iOS 状态栏和 UIView

Posted

技术标签:

【中文标题】iOS 状态栏和 UIView【英文标题】:iOS status bar and UIView 【发布时间】:2014-01-14 04:54:12 【问题描述】:

有 UIView、状态栏、ios 7 和 iOS 6。 使用 iOS 6 一切都很好:我的 UIView(透明,在“点击设置目的地”标签下)出现在状态栏的正下方。这是图片:

问题出在 iOS 7 上。这里:

我希望 UIView 将位于状态栏下方,而不是下方。 我已经尝试检测 iOS 版本,如果它是 7 或更高版本,则以编程方式更改 UIView 框架。但是我的用户界面带有故事板中的所有约束......所以它没有帮助。我该怎么做才能解决这个问题?

UPD:也许我真的应该为 iOS7 设计更多功能?我会考虑的,谢谢推荐!

【问题讨论】:

请告诉我们您在检测ios版本和UIView重定位框架的生命周期方法? 这对于 iOS7 来说似乎完全正常 - 也许您需要阅读 iOS 7 转换指南 developer.apple.com/library/ios/documentation/userexperience/… 作为旁注,这与 xcode IDE 无关,所以请不要使用该标签。如果您考虑使用“xcode”标记您的问题,请记住这一点,您可能不应该这样做。 在 viewDidLoad(主视图控制器)中。 为什么需要这个?您看到的全屏布局是 iOS7 中的默认行为,它是有意完成的。可能是时候重新考虑您的设计了,否则您的应用在新操作系统中可能会显得过时。 查看UIViewController 上的topLayoutGuide 属性。 【参考方案1】:

在您的视图控制器viewDidLoad 中,您应该添加:

if (([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)) 
    [self setEdgesForExtendedLayout:UIRectEdgeNone];

【讨论】:

【参考方案2】:

如果您真的需要这样做,您可以将地图视图放在另一个视图中,该视图将成为控制器的根视图。此根视图在 iOS 6 中位于状态栏下方,在 iOS 7 中为全屏。为根视图设置黑色背景。

将此根视图的约束添加到地图视图并在viewDidLoad: 检查iOS 版本。在 iOS 7 中,将顶部约束从 0 更改为状态栏高度(或将包含添加到 topLayoutGuide 并删除顶部约束)。

但是,您看到的行为对于 iOS 7 来说是正常的,并且试图让您在状态栏下查看,您会让您的应用看起来过时。也许是时候重新考虑你的设计了。

【讨论】:

我想你是对的(关于设计)。我应该做得更好。【参考方案3】:

在 iOS 7 中,这是状态栏的默认行为。我想最简单的解决方案是将状态栏全部隐藏起来。

- (void)viewDidLoad

    [super viewDidLoad];
    // Do any additional setup after loading the view.

    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) 
        // iOS 7
        [self prefersStatusBarHidden];
        [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
     else 
        // iOS 6
        [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
    



// Add this Method
- (BOOL)prefersStatusBarHidden

    return YES;

【讨论】:

这不是解决方案。应用程序应该只在有充分理由时才隐藏状态栏,而不仅仅是出于懒惰。来自 HIG:“永久隐藏状态栏意味着用户必须离开您的应用程序才能读取时间或了解他们是否有 Wi-Fi 连接。”隐藏状态栏也使得访问控制中心和通知中心更加不方便。 非常感谢,但我不想隐藏状态栏。 @NoahWitherspoon 在 iOS 7 中,状态栏覆盖在所有视图上。您不能上下移动视图以使其看起来像“iOS 6”。这就是为什么我为 iOS 7 更新或制作的每个应用程序最终都会隐藏它。不是因为我懒惰,因为别无选择 是的,你可以。许多同时支持 iOS 6 和 7 的应用程序已经这样做了。 [[UIDevice currentDevice] systemVersion] 是你的朋友。【参考方案4】:

尝试了很多方法,我看到了几十个帖子。最后,这是我找到的最佳解决方案。

Proper way to hide status bar on iOS, with animation and resizing root view

【讨论】:

以上是关于iOS 状态栏和 UIView的主要内容,如果未能解决你的问题,请参考以下文章

状态栏和导航栏的颜色不同,但实际上它们应该相同

iOS导航栏和状态栏

iOS:状态栏和导航栏:空格或底层

iOS 8 -- 对导航栏和状态栏应用模糊

为啥ios中的状态栏和导航栏背景颜色不同

iOS获取状态栏和导航栏尺寸(宽度和高度)