[ios] iOS7에서 투명한 UIToolbar 또는 UINavigationBar를 그리는 방법

나는 완전히 투명 UIToolbar하고 / 또는 UINavigationBar. iOS 5 전후에 제안 된 다양한 주문을 시도했지만 더 이상 작동하지 않는 것 같습니다.

iOS 7에서 어떻게이 작업을 수행 할 수 있습니까?



답변

Swift 3 (iOS 10)

투명한 UIToolbar

self.toolbar.setBackgroundImage(UIImage(),
                                forToolbarPosition: .any,
                                barMetrics: .default)
self.toolbar.setShadowImage(UIImage(), forToolbarPosition: .any)

투명한 UINavigationBar

self.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.isTranslucent = true

스위프트 <3

투명한 UIToolbar

self.toolbar.setBackgroundImage(UIImage(),
                                forToolbarPosition: UIBarPosition.Any,
                                barMetrics: UIBarMetrics.Default)
self.toolbar.setShadowImage(UIImage(),
                            forToolbarPosition: UIBarPosition.Any)

투명한 UINavigationBar

self.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.translucent = true

목표 -C

투명한 UIToolbar

[self.toolbar setBackgroundImage:[UIImage new]
              forToolbarPosition:UIBarPositionAny
                      barMetrics:UIBarMetricsDefault];
[self.toolbar setShadowImage:[UIImage new]
          forToolbarPosition:UIBarPositionAny];

투명한 UINavigationBar

[self.navigationBar setBackgroundImage:[UIImage new]
                         forBarMetrics:UIBarMetricsDefault];
self.navigationBar.shadowImage = [UIImage new];
self.navigationBar.translucent = YES;

토론

설정 translucentYES탐색 모음에서 것은 인해 논의 행동에 트릭을 수행 UINavigationBar설명서를 참조하십시오. 여기서 관련 부분을보고하겠습니다.

YES불투명 한 사용자 정의 배경 이미지가있는 탐색 모음 에서이 속성을로 설정 하면 탐색 모음이 이미지에 1.0 미만의 시스템 불투명도를 적용합니다.


최종 결과

최종 결과


답변

전체 앱을 통해 수행하려면 UIAppearance 프록시 (iOS5 +)를 사용해야합니다.


UINavigationBar *navigationBarAppearance = [UINavigationBar appearance];
navigationBarAppearance.backgroundColor = [UIColor clearColor];
[navigationBarAppearance setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
navigationBarAppearance.shadowImage = [[UIImage alloc] init];

문서 : https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIAppearance_Protocol/Reference/Reference.html

기사 : http://nshipster.com/uiappearance/


답변

시험:

[navBar setBackgroundImage:[UIImage alloc] forBarMetrics:UIBarMetricsDefault];


답변

@implementation MyCustomNavigationBar

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self setup];
    }
    return self;
}

- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if (self) {
        [self setup];
    }
    return self;
}

- (void)setup {
    [self setupBackground];
}

- (void)setupBackground {
    self.backgroundColor = [UIColor clearColor];
    self.tintColor = [UIColor clearColor];

    // make navigation bar overlap the content
    self.translucent = YES;
    self.opaque = NO;

    // remove the default background image by replacing it with a clear image
    [self setBackgroundImage:[self.class maskedImage] forBarMetrics:UIBarMetricsDefault];

    // remove defualt bottom shadow
    [self setShadowImage: [UIImage new]];
}

+ (UIImage *)maskedImage {
    const float colorMask[6] = {222, 255, 222, 255, 222, 255};
    UIImage *img = [UIImage imageNamed:@"nav-white-pixel-bg.jpg"];
    return [UIImage imageWithCGImage: CGImageCreateWithMaskingColors(img.CGImage, colorMask)];
}

@end


답변

내가 우연히 발견 한 것은 서브 클래스 UINavigationBar를 생성 한 다음 빈 -(void)drawRect:메서드 를 생성하면 투명한 내비게이션 바가 표시 된다는 것입니다. iOS 7 *에서만 테스트했지만 작동하는 것 같았습니다!


답변