蘋果終於發布了iOS 7正式版,大批的使用者都已經紛紛進行了升級。如果App是由Xcode 4.6或者更早版本產生,iOS 7系統會使用相容模式運行該App,以便儘可能保持原有外觀。但是,當使用Xcode 5重新編譯App原始碼時,此時會使用iOS 7 SDK來進行編譯連結。(注意在使用Xcode 5開啟舊項目之前備份項目原始碼,因為Xcode 5會升級項目中的資源檔,且無法再使用舊版本的Xcode開啟。)由於iOS 7 SDK較早期版本的SDK改動較大,因此App的介面也會出現種種問題,其中最明顯的問題就是狀態列與導覽列的顯示問題。
iOS 6:
iOS7:
當未使用導覽列時,上面的對比了在iOS 6與iOS 7上的顯示情況。iOS 6中的狀態列不透明,視圖控制器的主視圖原點在狀態列下面。而iOS 7的狀態列背景色變為透明色,視圖控制器的主視圖原點在螢幕左上方,即狀態列顯示在主視圖之上,透過狀態列可以顯示視圖的內容。
iOS 7提供了兩種狀態列的樣式,用於控制狀態列文字的顏色。
typedef NS_ENUM(NSInteger, UIStatusBarStyle){ UIStatusBarStyleDefault = 0, // Dark content, for use on light backgrounds UIStatusBarStyleLightContent NS_ENUM_AVAILABLE_IOS(7_0) = 1, // Light content, for use on dark backgrounds UIStatusBarStyleBlackTranslucent NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 1, UIStatusBarStyleBlackOpaque NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 2,};
如果狀態列背景為淺色,應選用黑色字樣式(UIStatusBarStyleLightContent);如果背景為深色,則選用白色字樣式(UIStatusBarStyleDefault,預設值)。
iOS 7的UIViewController類裡添加了幾個新的方法,用於控制狀態列。
// These methods control the attributes of the status bar when this view controller is shown. They can be overridden in view controller subclasses to return the desired status bar attributes.- (UIStatusBarStyle)preferredStatusBarStyle NS_AVAILABLE_IOS(7_0); // Defaults to UIStatusBarStyleDefault- (BOOL)prefersStatusBarHidden NS_AVAILABLE_IOS(7_0); // Defaults to NO// This should be called whenever the return values for the view controller's status bar attributes have changed. If it is called from within an animation block, the changes will be animated along with the rest of the animation block.- (void)setNeedsStatusBarAppearanceUpdate NS_AVAILABLE_IOS(7_0);
preferredStatusBarStyle方法用於指定當前視圖控制器的狀態列樣式,prefersStatusBarHidden方法指定是否隱藏狀態列。當修改了狀態列的字型顏色、顯示或隱藏時,調用setNeedsStatusBarAppearanceUpdate方法告知系統需要重新整理狀態列。