我使用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];
}
答案 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添加了新的约束