使用UINavigationBar外观获取导航栏的框架

时间:2014-04-26 21:19:36

标签: objective-c ios7 uinavigationbar uiappearance

很抱歉这是一个简单的问题,但代码如下:

[[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?

2 个答案:

答案 0 :(得分:1)

尝试:

CGRect frame = self.navigationController.navigationBar.frame;

答案 1 :(得分: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的精彩概述。