状态栏是iOS7中没有Storyboard的视图

时间:2013-11-03 15:26:06

标签: ios ios7

我使用iOS7 SDK创建了我的第一个应用程序,这是一个没有Storyboard的“空应用程序”。 状态栏始终覆盖所有其他视图。 所以我添加了这段代码:

if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
    self.edgesForExtendedLayout = UIRectEdgeNone;

但它什么都没改变。我的完整代码:

- (void)viewDidLoad
{
    [super viewDidLoad];

    if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
        self.edgesForExtendedLayout = UIRectEdgeNone;

    UIView *v = [[UIView alloc] initWithFrame:CGRectMake(30, 0, 200, 300)];
    [v setBackgroundColor:[UIColor greenColor]];

    [self.view addSubview:v];
}

1 个答案:

答案 0 :(得分:1)

edgesForExtendedLayout仅在存在UI容器视图控制器(例如UINavigationController)时应用。为避免重叠,您应该使用-topLayoutGuide(它也存在底部布局指南)。我创建了一个gist on github,它使用容器视图作为vc主视图的子视图,并使用此布局集。

//This should be added before the layout of the view
- (void) adaptToTopLayoutGuide {
    //Check if we can get the top layoutguide
    if (![self respondsToSelector:@selector(topLayoutGuide)]) {
        return;
    }
    //tankView is a contaner view
    NSArray * array = [self.tankView referencingConstraintsInSuperviews]; //<--For this method get the Autolayout Demistified Book Sample made by Erica Sadun
    [self.view removeConstraints:array];
    NSArray * constraintsVertical = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[topLayoutGuide]-0-[tankView]|" options:0 metrics:nil views:@{@"tankView": self.tankView, @"topLayoutGuide":self.topLayoutGuide}];
    [self.view addConstraints:constraintsVertical];
    NSArray * constraintsHorizontal = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[tankView]|" options:0 metrics:nil views:@{@"tankView": self.tankView}];
    [self.view addConstraints:constraintsHorizontal];

}

这段代码是一个控件,看看我们有一个topLayoutGuide,后来它删除了与superview相关的tankView(这是一个在xib中添加和连接的容器视图)的约束,并根据topLayoutGuide添加了新的约束