iPhone的iOS如何重新绘制UINavigationBar的需求?

我有代码,使用外观属性更改导航栏的颜色。 我希望对导航栏颜色的更改立即可见。 但是,我无法find正确的调用来重新绘制导航栏。 目前,当我推动一个模式导航控制器,因此覆盖了导航栏颜色的变化。

这不起作用:

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; } } 

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

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