2

我正在努力更新我的应用程序以支持iOS7,但是我的一个视图与状态栏重叠。请参考我的图片,

在此处输入图像描述

苹果建议我们使用,self.edgesForExtendedLayout = UIRectEdgeNone;避免全屏布局。但是,当我们UIViewController在 aUINavigationController中并且导航栏可见时,这是有效的。在我的应用程序中,我没有使用UINavigationController. 谁能帮我解决没有导航栏的 UIViewController 上的重叠问题。

4

5 回答 5

5

最后我自己找到了答案。我们需要在 - (void) viewDidLayoutSubviews方法中偏移框架,如下所示,

- (void) viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    if([self respondsToSelector:@selector(edgesForExtendedLayout)])
    {
        CGRect frame = self.view.frame;
        frame.origin.y = 20;
        frame.size.height = frame.size.height - 20;
        self.view.frame = frame;
    }
}

由于我是在- (void) viewDidLayoutSubviews方法中设置框架,因此用户将看不到过渡。如果我们在 中偏移帧-(void) viewDidload,用户将看到过渡。希望这会对某人有所帮助。

于 2014-04-11T13:20:19.537 回答
0

您是否wantsFullScreenLayout = YES在 ViewController 上设置了某个位置?

于 2013-09-24T11:41:09.010 回答
0

我在这里写了一个完整的解释:https ://stackoverflow.com/a/18855464/1078579

简短的回答是没有办法阻止状态栏在 iOS 7 上与您的应用程序重叠。edgesForExtendedLayout只会影响 UINavigationController 或 UITabBarController 内的子视图控制器。

如果您想保留 iOS 6 样式的布局,您需要将应用程序的内容移动到 (0,20,320,548) 容器视图中。

于 2013-09-24T13:04:40.847 回答
0

只需在 viewDidLoad 中偏移您的视图:

CGRect frame = self.view.frame;
frame.y = 20;
self.view.frame = frame;
于 2013-09-24T12:46:00.230 回答
-1

在 ViewDidLoad 中添加以下代码

if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
 {
    self.edgesForExtendedLayout = UIRectEdgeNone;
 }
于 2013-11-08T12:16:50.263 回答