【问题标题】:Set UINavigationBar background image in ViewController在 ViewController 中设置 UINavigationBar 背景图片
【发布时间】:2013-04-23 21:11:09
【问题描述】:

我可以使用以下代码在应用程序委托 didFinishLaunchingWithOptions 方法中将导航栏的背景设置为自定义图像:

UIImage *navBarImage;
navBarImage = [UIImage imageNamed:@"navbar.png"];

[[UINavigationBar appearance] setBackgroundImage: navBarImage forBarMetrics:UIBarMetricsDefault];

我正在尝试在我的应用程序中添加一个选项,以在切换开关时更改导航栏的背景图像,但它似乎不起作用。是否只能在应用启动时设置背景图像?应用已启动后如何执行此操作?

这是我的代码:

- (void) switchChanged:(id)sender {
    UISwitch* switchView = sender;

        if (switchView.isOn) {
            UIImage *navBarImage = [UIImage imageNamed:@"black_nav.png"];
            [[UINavigationBar appearance] setBackgroundImage: navBarImage forBarMetrics:UIBarMetricsDefault];
        }
        else {
            UIImage *navBarImage = [UIImage imageNamed:@"white_nav.png"];
            [[UINavigationBar appearance] setBackgroundImage: navBarImage forBarMetrics:UIBarMetricsDefault];
        }
}

【问题讨论】:

    标签: iphone ios objective-c uinavigationcontroller


    【解决方案1】:

    使用setBackgroundImage:forBarMetrics:方法:

    [navbar setBackgroundImage:[UIImage imageNamed:@"navbar"] 
                   forBarMetrics:UIBarMetricsDefault];
    

    【讨论】:

      【解决方案2】:

      您可以这样做替换每个视图中的默认值:

      UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,
       self.navigationController.navigationBar.frame.size.width,
       self.navigationController.navigationBar.frame.size.height)];
      [imageView setImage:[UIImage imageNamed:@"newImage.png"]];
      [self.navigationController.navigationBar addSubview:imageView];
      [self.navigationController.navigationBar sendSubviewToBack:imageView];
      

      【讨论】:

      • 它让我的 navBar 在 8.3 中消失了,但我删除了最后一行:sendSubviewToBack: 效果很好。
      【解决方案3】:

      试试这个

      // 创建可调整大小的图像

      UIImage *gradientImage44 = [[UIImage imageNamed:@"surf_gradient_textured_44"]
                 resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
       UIImage *gradientImage32 = [[UIImage imageNamed:@"surf_gradient_textured_32"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
      

      // 为all UINavigationBars 设置背景图片

       [[UINavigationBar appearance] setBackgroundImage:gradientImage44 forBarMetrics:UIBarMetricsDefault];
      [[UINavigationBar appearance] setBackgroundImage:gradientImage32 forBarMetrics:UIBarMetricsLandscapePhone];
      

      【讨论】:

        猜你喜欢
        • 2012-03-07
        • 2014-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-25
        • 1970-01-01
        • 1970-01-01
        • 2017-09-22
        相关资源
        最近更新 更多