UIViewController的edgesForExtendedLayout屬性

想必你們都遇到一種狀況,明明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

方法一:改變edgesForExtendedLayout

self.edgesForExtendedLayout = UIRectEdgeNone;

將edgesForExtendedLayout屬性設置爲UIRectEdgeNone,這樣佈局就是從導航欄下面開始了。設置以後,再來看看效果:ip


方法二:導航欄半透明屬性設置爲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;

將導航欄的半透明屬性關閉掉,佈局也是從導航欄下面開始了。get

相關文章
相關標籤/搜索