iOS 7 UINavigationBar外观不能第一次工作......

时间:2013-11-14 18:17:58

标签: ios objective-c uinavigationbar uiappearance

我正在尝试在iOS7应用中更改UINavigationBar的外观。我正在做以下事情:

- (void)viewDidLoad
{
    [super viewDidLoad];

    m_sNumberToCall = @"";

    UIBarButtonItem * btn = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"IconHome.png"] style:UIBarButtonItemStyleBordered target:self action:@selector(btHomeTouched:)];
    self.navigationItem.leftBarButtonItem = btn;

    self.navigationController.navigationBar.translucent = YES;


    [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"TVCNavBack.png"] forBarMetrics:UIBarMetricsDefault];

    NSShadow * shadow = [[NSShadow alloc] init];
    shadow.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8];
    shadow.shadowOffset = CGSizeMake(0, 1);
    [[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
                                                           [UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0],
                                                           NSForegroundColorAttributeName,
                                                           shadow,
                                                           NSShadowAttributeName,
                                                           [UIFont fontWithName:@"Helvetica-Bold" size:21.0],
                                                           NSFontAttributeName,
                                                           nil]];
}

但是,我第一次呈现UITableViewController它是标准的iOS7导航栏,然后我按回家并重新呈现它,这是我的新面貌。

为什么它第一次不起作用的任何想法?

2 个答案:

答案 0 :(得分:28)

请勿直接更改外观,而是更改导航栏。外观仅影响未来的实例,但不影响已创建的实例。

变化:

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"TVCNavBack.png"] forBarMetrics:UIBarMetricsDefault];

为:

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"TVCNavBack.png"] forBarMetrics:UIBarMetricsDefault];

答案 1 :(得分:2)

之前的答案只能帮助您处理背景图片,而不能使用title text attributes

您不需要更改代码,但您只需将其移至

即可

applicationDidFinishLaunchingWithOptions

AppDelegate.m文件中。