2011-04-08 4 views
2

UINavigationBar 및 UIToolbar에 대한 사용자 지정 이미지를 사용하는 응용 프로그램에서 작업 중이지만 탐색 모음 아래와 도구 모음 위의 그림자가 필요합니다. 이는 다른 모든보기 컨트롤러보다 항상 쉬울 것입니다. 그림자를 포함하는 배경 이미지를 단순히 만들 수는 없으므로 내 표 뷰와 잘 맞지 않습니다. 또한 nav 막대와 도구 모음을 숨김 (애니메이션)으로 설정하면 그림자가 움직일 수 있어야합니다.uinavigationbar 및 uitoolbar에 첨부 된 그림자를 추가하는 방법

인터넷에서 스택 오버플로 및 기타 소스를 살펴본 결과 제안 된 솔루션을 사용해 보았지만 UINavigationBar, UIToolbar 또는 UINavigationController를 하위 클래스로 만들면 이후의 결과를 얻을 수 없습니다.

제공되는 도움을 주시면 감사하겠습니다. 감사합니다 :)

답변

2

결국 그림자로 배경 png 이미지를 사용하고 drawRect 메서드 (배경 이미지 용)를 구현 한 UINavigationBar 및 UIToolbar의 하위 클래스와 탐색 모음의 크기를 조정하기위한 sizeThatFits 메서드를 적용하기로 결정했습니다.

- (void)drawRect:(CGRect)rect { 
    UIImage *image = [[UIImage imageNamed:@"bargloss-withshadow.png"] retain]; 
    [image drawInRect:rect]; 
    [image release]; 
} 


- (CGSize)sizeThatFits:(CGSize)size { 
    CGSize newSize = CGSizeMake(320,60); 
    return newSize; 
} 

있습니다 나는 또한에있는 바, 블랙 반투명 작성 : 여기

내가 각 하위 클래스에서 구현되는 방법입니다 : 여기에 최종 제품은 (버튼 막대를 숨 깁니다)입니다 IB가 그 아래에 내용이 흐르도록했습니다.

0

매트 갤러거의 blog post을 확인하십시오. 그것은 당신이하고 싶은 것을 (일부) 포함합니다. 그 외에도 네비게이션 컨트롤러 위에 "그림자보기"를 추가하여 원하는대로 움직일 수 있습니다.

+0

나는 matt의 게시물을 보았지만이를 사용하려고 시도했지만 UINavigationBar 및 UIToolbar의 layoutsubviews 메서드를 사용하여 뷰의 경계 밖에 레이어를 배치 할 수 없습니다. 나는이 예제를 수정하여 (이 질문을 게시하기 전에 이것을 했음) 치료 한 슈퍼 뷰에 레이어를 추가했지만 그림자는 첨부되지 않았으므로 그림자를 방금 콘텐츠 위에 띄웠다. – scottsanders

1

보기 계층 구조가 너무 화려하지 않다고 가정하면 비교적 쉽게 수행 할 수 있습니다. 다음 코드 줄을 application : didFinishLaunchingWithOptions 메서드에 추가합니다.

dispatch_async(dispatch_get_main_queue(), ^{ 
    UIWindow* mainWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:0]; 
    UIView* mainView = [[mainWindow subviews] objectAtIndex:0]; 
    UIImageView* shadowImageView = [[UIImageView alloc] initWithImage:kImgNavbarShadowResizeable]; 
    shadowImageView.frame = CGRectMake(0, 64, 320, shadowImageView.frame.size.width); 
    [mainView insertSubview:shadowImageView atIndex:1]; 
}); 

shadowImageView는 그림자로 사용하려는 imageView입니다.

관련 문제