문제

uinavigationbar에 대한 사용자 정의 배경을 추가하고 있습니다. 전화가 초상화 모드에있는 한 잘 작동합니다. 조경 모드로 전환하자마자 막대의 절반이 파란색으로 나타나고 (기본 Navbar 색상), 절반은 내 이미지가 있습니다.

조경 모드의 이미지를 어떻게 늘리고 초상화 모드를 위해 다시 작게 만들 수 있습니까?

감사

해결책
내비게이션 바에 이미지를 추가하는 방법에 대한 답을 찾고있는 사람이 있습니다.

UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, 480.0, 44.0)];
[imgView setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"navbar_landscape" ofType:@"png"]]];
[navigationController.navigationBar addSubview:imgView];
[imgView release];
도움이 되었습니까?

해결책

백그라운드 이미지보기의 자동화기 마스크를 설정해야 할 것입니다. 사용해보십시오 UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight

다른 팁

두 화면 방향 모드에서 사용하는 것이 훨씬 좋습니다.

[navigationController.navigationBar insertSubview:imgView atIndex:0];

이렇게하면 이미지보기가 다른 모든 뷰에 표시되고 모든 기본 탐색 막대 요소 (제목, 표준 버튼)가 작동합니다.

약간의 연구와 트레일 및 오류 후, 나는 영화 재생 모드를 입력 할 때 Navbar를 대체하지 않는 작업을 발견했습니다. 희망적으로 이것은 앱 승인에 문제를 일으키지 않지만이 게시물을 기반으로하면 괜찮을 것 같습니다.

http://developer.apple.com/iphone/library/qa/qa2009/qa1637.html

@implementation UINavigationBar (UINavigationBarCategory)

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
    if([self isMemberOfClass: [UINavigationBar class]]){
        UIImage *image = [UIImage imageNamed:@"navBarBackground.png"];
        CGContextClip(ctx);
        CGContextTranslateCTM(ctx, 0, image.size.height);
        CGContextScaleCTM(ctx, 1.0, -1.0);
        CGContextDrawImage(ctx, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), image.CGImage);
    }else{
        [super drawLayer:layer inContext:ctx];
    }
}

@end

Ben이 제공 한 솔루션은 문제를 해결했지만 조경 모드에서 이미지를 확장했습니다. 결국 두 개의 이미지를 만들었습니다. 하나는 풍경 용으로, 다른 하나는 초상화 모드를위한 것입니다. 그런 다음 배향을 기반으로 Navbar 이미지를 변경하기 위해 DUSTAUTOROTATE에 코드를 추가했습니다.

Uinavigation bar 인스턴스의 프레임 크기를 확인하여 다른 방향에 대한 다른 이미지를 제공하여 초상화 및 조경 방향에 대한 이미지를 변경할 수 있습니다.

- (void) drawLayer:(CALayer *)layer inContext:(CGContextRef)context
{
    if ([self isMemberOfClass:[UINavigationBar class]] == NO) {
        return;
    }

    UIImage *image = (self.frame.size.width > 320) ?
                        [UINavigationBar bgImageLandscape] : [UINavigationBar bgImagePortrait];
    CGContextClip(context);
    CGContextTranslateCTM(context, 0, image.size.height);
    CGContextScaleCTM(context, 1.0, -1.0);
    CGContextDrawImage(context, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), image.CGImage);
}

그리고 이 완전한 데모 Xcode 프로젝트 UinavationBar의 모양을 사용자 정의하는 데 도움이 될 수 있습니다. 또한 iPhone 4 장치의 Retina 디스플레이를 지원하는 @2x 버전의 배경 이미지도 포함되어 있습니다.

더 간단한 방법을 시도하십시오 [UIImage imageNamed:@"navbar_landscape.png"] UI 요소는 정확히 무엇이기 때문입니다 imageNamed : ljonesatl이 보여주는 것처럼 의도 된 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top