想必大家都遇到一种情况,明明y坐标设置的是0,但是总是被讨厌的导航栏给遮住。比如下面这个情况:
昨天写程序遇到一个小情况,明明y坐标设置的是0 ,但是却被导航栏给挡住了。 比如下面这种情况:
先创建测试用label
UILabel *testLabel = [[UILabel alloc] init];
testLabel.frame = CGRectMake(25, 0, self.view.bounds.size.width - 50, 86);
testLabel.text = @"测试用,你别挡住我";
testLabel.textAlignment = NSTextAlignmentCenter;
testLabel.backgroundColor = [UIColor blueColor];
testLabel.textColor = [UIColor orangeColor];
[self.view addSubview:testLabel];
运行看效果:
是不是很不友好呢? 还好,再iOS7 之后,UIViewController 引入了一个新的属性:edgesForExtendedLayout 。这个属性默认值是UIRectEdgeAll 。当你的容器是UINavigationController 的时候,默认的布局就是从状态栏的顶部开始的,所以就被导航栏给遮挡住了。
@property(nonatomic,assign) UIRectEdge edgesForExtendedLayout NS_AVAILABLE_IOS(7_0); // Defaults to UIRectEdgeAll
有问题,必有能解决! 方法有两种:
** 方法一: 修改edgesForExtendedLayout **
self.edgesForExtendedLayout = UIRectEdgeNone;
将edgesForExtendedLayout属性设置为UIRectEdgeNone,这样布局就是从导航栏下面开始了。设置之后,再来看看效果:
控件完美呈现。
** 方法二: 导航栏半透明属性设置为NO **
@property(nonatomic,assign,getter=isTranslucent) BOOL translucent NS_AVAILABLE_IOS(3_0) UI_APPEARANCE_SELECTOR; // Default is NO on iOS 6 and earlier. Always YES if barStyle is set to UIBarStyleBlackTranslucent
在iOS 6之前(包括iOS 6)translucent默认就是NO,在iOS 7之后就默认是YES了。
self.navigationController.navigationBar.translucent = NO;
将导航栏的包透明属性设置为NO之后,控件也能完美呈现了。 效果图和上面一样。