【问题标题】:iPhone iOS how to redraw UINavigationBar on demand?iPhone iOS如何按需重绘UINavigationBar?
【发布时间】:2012-02-28 15:28:19
【问题描述】:

我有使用外观属性更改导航栏颜色的代码。我希望对导航栏颜色的更改立即可见。但是,我找不到合适的调用来重绘导航栏。目前,当我按下模态导航控制器时,它的颜色会发生变化,从而覆盖导航栏。

这不起作用:

AppDelegate* appDelegate = ((AppDelegate*)[[UIApplication sharedApplication] delegate]);

    [appDelegate.window setNeedsDisplay];

我还尝试让导航控制器的各种实例重绘它们的视图,但没有奏效。

要求 UINavigationBar 按需重绘自身的正确方法是什么?

谢谢!

更新:这是有效的代码!

    - (UIColor *) colorOfPoint:(CGPoint)point
    {
        unsigned char pixel[4] = {0};
        CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
        CGContextRef context = CGBitmapContextCreate(pixel, 1, 1, 8, 4, colorSpace, kCGImageAlphaPremultipliedLast);

        CGContextTranslateCTM(context, -point.x, -point.y);

        [self.view.layer renderInContext:context];

        CGContextRelease(context);
        CGColorSpaceRelease(colorSpace);

        NSLog(@"pixel: %d %d %d %d", pixel[0], pixel[1], pixel[2], pixel[3]);
        float red = pixel[0]/255.0;
        float green = pixel[1]/255.0;
        float blue = pixel[2]/255.0;
        float alpha = pixel[3]/255.0;
        UIColor *color = [UIColor colorWithRed:red green:green blue:blue alpha:alpha];

        [[NSUserDefaults standardUserDefaults] setFloat:red forKey:@"navBarRed"];
        [[NSUserDefaults standardUserDefaults] setFloat:green forKey:@"navBarGreen"];
        [[NSUserDefaults standardUserDefaults] setFloat:blue forKey:@"navBarBlue"];    
        [[NSUserDefaults standardUserDefaults] setFloat:alpha forKey:@"navBarAlpha"];



        return color;
    }





  - (IBAction)handleTapFrom:(id)sender {

        if([sender isKindOfClass:[UITapGestureRecognizer class]])
        {


            CGPoint location = [tapGestureRecognizer locationInView:self.view];

            //remember color preferences
         UIColor* navbarColor =  [self colorOfPoint:location];
            selectColorView.center = location;

            //UPDATE THE NAVBAR COLOR CODE HERE

    //this does not update immediately 
        float navBarRed = [[NSUserDefaults standardUserDefaults] floatForKey:@"navBarRed"];
        float navBarGreen = [[NSUserDefaults standardUserDefaults] floatForKey:@"navBarGreen"];    
        float navBarBlue = [[NSUserDefaults standardUserDefaults] floatForKey:@"navBarBlue"];
        float navBarAlpha = [[NSUserDefaults standardUserDefaults] floatForKey:@"navBarAlpha"];

       UIColor* navBarColor =  [UIColor colorWithRed:navBarRed green:navBarGreen blue:navBarBlue alpha:navBarAlpha];


//set the color of all newly created navbars
        [[UINavigationBar appearance] setTintColor:navBarColor];  
        [[UINavigationBar appearance] setBarStyle:UIBarStyleBlackTranslucent];
        [[UINavigationBar appearance] setAlpha:0.7];


        //update the toolbar appearance
        [[UIToolbar appearance] setTintColor:navBarColor];

//set the color of the current navbar, displaying immediate change
self.navigationController.navigationBar.tintColor = navbarColor;



        }



    }

【问题讨论】:

  • 你试过[myNavigationController.navigationBar setNeedsDisplay];
  • 何时重绘导航栏??
  • 是正确的导航控制器还是设置了推送控制器的导航栏?你能把你的代码贴在你设置导航栏颜色的地方吗?——那会更相关。
  • 我的根导航控制器来自情节提要,您建议的代码对此不起作用。

标签: iphone ios uinavigationcontroller uinavigationbar


【解决方案1】:

你不能只设置 NavigationBartintColor 吗?这应该工作:

self.navigationController.navigationBar.tintColor = [UIColor redColor];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 2011-01-09
    • 2010-12-09
    • 2012-04-30
    相关资源
    最近更新 更多