...에 이미지를 추가 할 수있는 더 좋은 방법을 뒤로 버튼이 제대로 표시 않지만 그래도 시스템이 추가됩니다 UINavigationBar
가 서브 클래스 또는 카테고리를 확인하고 drawRect
메소드를 오버라이드 (override)하는 것입니다 :
// #Lighter r,g,b,a #Darker r,g,b,a
#define MAIN_COLOR_COMPONENTS { 0.153, 0.306, 0.553, 1.0, 0.122, 0.247, 0.482, 1.0 }
#define LIGHT_COLOR_COMPONENTS { 0.478, 0.573, 0.725, 1.0, 0.216, 0.357, 0.584, 1.0 }
@implementation UINavigationBar (UINavigationBarCategory)
- (void)drawRect:(CGRect)rect {
if (imageReady) {
UIImage *img = [UIImage imageNamed: @"navigation_background.png"];
[img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
} else {
// Render yourself instead.
// You will need to adjust the MAIN_COLOR_COMPONENTS and LIGHT_COLOR_COMPONENTS to match your app
// emulate the tint colored bar
CGContextRef context = UIGraphicsGetCurrentContext();
CGFloat locations[2] = { 0.0, 1.0 };
CGColorSpaceRef myColorspace = CGColorSpaceCreateDeviceRGB();
CGFloat topComponents[8] = LIGHT_COLOR_COMPONENTS;
CGGradientRef topGradient = CGGradientCreateWithColorComponents(myColorspace, topComponents, locations, 2);
CGContextDrawLinearGradient(context, topGradient, CGPointMake(0, 0), CGPointMake(0,self.frame.size.height/2), 0);
CGGradientRelease(topGradient);
CGFloat botComponents[8] = MAIN_COLOR_COMPONENTS;
CGGradientRef botGradient = CGGradientCreateWithColorComponents(myColorspace, botComponents, locations, 2);
CGContextDrawLinearGradient(context, botGradient,
CGPointMake(0,self.frame.size.height/2), CGPointMake(0, self.frame.size.height), 0);
CGGradientRelease(botGradient);
CGColorSpaceRelease(myColorspace);
// top Line
CGContextSetRGBStrokeColor(context, 1, 1, 1, 1.0);
CGContextMoveToPoint(context, 0, 0);
CGContextAddLineToPoint(context, self.frame.size.width, 0);
CGContextStrokePath(context);
// bottom line
CGContextSetRGBStrokeColor(context, 0, 0, 0, 1.0);
CGContextMoveToPoint(context, 0, self.frame.size.height);
CGContextAddLineToPoint(context, self.frame.size.width, self.frame.size.height);
CGContextStrokePath(context);
}
}
@end
이런 식으로 수행하여 버튼이 제대로 표시 될 수 적은 "해키"입니다 것입니다.
UINavigationBar을 서브 클래스 할 수 있지만 속성은 UINavigationController에서 읽기 전용입니다 ... 다른 것은 "이미지"가 서버에서 실제로 검색되어 즉석에서 설정되어야한다는 것입니다. – nicktmro
답변을 수락했으나 다음과 같이 입력 해 주셔서 감사합니다. navbar를 표시 할 때 이미지가 준비되지 않은 경우 검정색 배경이 나타납니다. 이미지를 사용하지 않고 기본 파란색 배경/스타일로 되돌릴 수있는 변경 사항이 있습니까? – nicktmro
예, 코드를 업데이트 할 것입니다 – coneybeare