【发布时间】: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