문제

카테고리를 통해 DrawRect를 재정의하여 UinaVigationBar에 사용자 정의 배경 이미지를 추가하고 있습니다.

- ( void )drawRect:( CGRect )rect{
    [[UIImage imageNamed:@"navbar.png"] drawInRect:CGRectMake( 0, self.frame.size.height-44, self.frame.size.width, 44 )];
}

이 솔루션은 NavigationItem.prompt 속성을 사용하려고 할 때까지 잘 작동하는 것 같습니다. 프롬프트를 제시하는 부드러운 애니메이션을 수행하는 대신 갑자기 갑자기 수행됩니다.

이것을 해결하는 방법에 대한 제안이 있습니까? 또는 배경 이미지를 설정하는 대체 방법.

추신. 뷰가 푸시/팝 할 때 물건이 재 배열되는 방식으로 인해 배경 이미지를 하위 뷰로 추가하는 것을 피하려고합니다. 그리고 나는 모든 뷰의 ViewDidAppear에서 sendsubviewtoback을 보내는 것을 싫어합니다.

티아!

편집 : 나는 또한 Method Swizzling을 시도했는데 이미지를 늘릴 수 있다면 잘 작동하지만 이미지가 스트레칭 할 수 없으므로 뻗기.

편집 : 아래의 해킹 대답을 참조하십시오

도움이 되었습니까?

해결책

너무 "해킹"이지만 이것은 내가 원하는 것을 할 수있는 가장 가까운 곳입니다 ...

기본적으로 메소드 스위이즈를 할 때, 단순히 모서리가 둥글게 되었기 때문에 이미지 스트레치가 잘 작동하지 않았습니다. 대신 코너를 별도의 투명 IMG로 만들고 스트레치 애니메이션의 영향을받지 않도록 하위 뷰로 추가했습니다.

그래서 내 카테고리는 이제 이렇게 보입니다 ..

#import "UINavigationBar+custom.h"

#define cornersTag 1

@implementation UINavigationBar (UINavigationBarCategory)

-(void)setCornersIfNeeded{
 UIImageView *corners = (UIImageView*)[self viewWithTag:cornersTag];
 if(!corners){
  UIImage *img = [[UIImage imageNamed:@"navbar_corners.png"] stretchableImageWithLeftCapWidth:10 topCapHeight:0];
  corners = [[[UIImageView alloc] initWithImage:img] autorelease];
  corners.frame = CGRectMake(0, 0, self.frame.size.width, img.size.height);
  corners.tag = cornersTag;
  [self addSubview:corners];
 }
}

- (void)customDrawRect:( CGRect )rect{
 [self customDrawRect:rect];
 [[UIImage imageNamed:@"navbar.png"] drawInRect:rect]; 
 [self setCornersIfNeeded];
}

@end

Method Swizzling에 대한 자세한 내용은 ... http://www.cocoadev.com/index.pl?methodswizzling그리고 iPhone 장치의 방법 스위 즈

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