想必你們都遇到一種狀況,明明y座標設置的是0,可是老是被討厭的導航欄給遮住。好比下面這個狀況:佈局
UILabel *label = [[UILabel alloc] init]; label.frame = CGRectMake(10, 0, SCREEN.width - 20, 88); label.backgroundColor = [UIColor redColor]; label.text = @"關注公衆號iOS開發:iOSDevTip"; label.textColor = [UIColor whiteColor]; label.textAlignment = NSTextAlignmentCenter; [self.view addSubview:label];
一塊兒來看看效果:atom
是否是很討厭!其實,在iOS 7中,UIViewController引入了一個新的屬性:edgesForExtendedLayout。 這個屬性的默認值是UIRectEdgeAll。當你的容器是UINavigationController的shih,默認的佈局就是從狀態欄的頂部開始的。這就是爲何你設置的控件都往上漂移了66ot的緣由。spa
@property(nonatomic,assign) UIRectEdge edgesForExtendedLayout NS_AVAILABLE_IOS(7_0); // Defaults to UIRectEdgeAll
那麼如何解決這個問題呢?有兩種方法。code
self.edgesForExtendedLayout = UIRectEdgeNone;
將edgesForExtendedLayout屬性設置爲UIRectEdgeNone,這樣佈局就是從導航欄下面開始了。設置以後,再來看看效果:ip
@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;
將導航欄的半透明屬性關閉掉,佈局也是從導航欄下面開始了。get