2014-04-26 53 views
0

對不起,簡單的問題,但下面的代碼:獲取導航欄的框架與UINavigationBar的外觀

[[UINavigationBar appearance] setBackgroundImage:[UIImage 
    imageNamed:@"backgroundNavigationBar.png"] forBarMetrics:UIBarMetricsDefault]; 
CGRect frame = [[UINavigationBar appearance] frame]; 
NSLog(@"%@", NSStringFromCGRect(frame)); 
UIView *view = [[UIView alloc] initWithFrame:frame]; 
[[UINavigationBar appearance] addSubview: view]; 

給我

{{0, 0}, {0, 0}} 

如何正確獲取當前導航欄的框架與實際尺寸,即320x64?

回答

1

嘗試:

CGRect frame = self.navigationController.navigationBar.frame; 
0

恐怕你的代碼將無法正常工作的方式,你希望:/

外觀代理肯定是不添加子視圖!

您只能通過UIAppearance編輯屬性,在頭文件中標記爲'UI_APPEARANCE_SELECTOR'!

編譯器允許您編寫代碼,因爲+ (instancetype)appearance實際上會返回類的代理對象。

要添加子視圖的實際視圖與該代理沒有任何關係。 UIAppearance查看代理對象,並在創建新視圖時僅複製標記的屬性UI_APPEARANCE_SELECTOR

請仔細閱讀本https://developer.apple.com/library/ios/documentation/uikit/reference/UIAppearance_Protocol/Reference/Reference.html

http://nshipster.com/uiappearance/ ,它會給你的UIAppearance是如何使用的一個很好的概述。