iOS 7에서 완전히 투명한 탐색 표시 줄을 만드는 방법
내 앱의 UINavigationBar가 완전히 투명하고 그 아래의 뷰 컨트롤러로 플러시되기를 원합니다. 그러나 내가 찾을 수있는 유일한 코드는 반투명하지만 투명하지는 않습니다. 노트 앱에서 사용되기 때문에 iOS 7 에서이 작업을 수행 할 수 있다는 것을 알고 있습니다. 내 질문은 그들이 사용했던 코드는 무엇입니까?
에서 이 답변
[self.navigationController.navigationBar setBackgroundImage:[UIImage new]
forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.shadowImage = [UIImage new];
self.navigationController.navigationBar.translucent = YES;
self.navigationController.view.backgroundColor = [UIColor clearColor];
self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
또한 Josh가 의견에서 제안한대로 막대를 기본값으로 다시 설정하십시오.
[self.navigationController.navigationBar setBackgroundImage:nil
forBarMetrics:UIBarMetricsDefault];
Swift3 및 Swift4의 경우
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
스위프트 2.2
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.translucent = true
오브젝티브 -C
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.shadowImage = [UIImage new];
self.navigationController.navigationBar.translucent = YES;
Objective-C 카테고리로서의 자체 솔루션 :
UINavigationController + TransparentNavigationController.h
@interface UINavigationController (TransparentNavigationController)
- (void)presentTransparentNavigationBar;
- (void)hideTransparentNavigationBar;
@end
UINavigationController + TransparentNavigationController.m
#import "UINavigationController+TransparentNavigationController.h"
@implementation UINavigationController (TransparentNavigationController)
- (void)presentTransparentNavigationBar
{
[self.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
[self.navigationBar setTranslucent:YES];
[self.navigationBar setShadowImage:[UIImage new]];
[self setNavigationBarHidden:NO animated:YES];
}
- (void)hideTransparentNavigationBar
{
[self setNavigationBarHidden:YES animated:NO];
[self.navigationBar setBackgroundImage:[[UINavigationBar appearance] backgroundImageForBarMetrics:UIBarMetricsDefault] forBarMetrics:UIBarMetricsDefault];
[self.navigationBar setTranslucent:[[UINavigationBar appearance] isTranslucent]];
[self.navigationBar setShadowImage:[[UINavigationBar appearance] shadowImage]];
}
@end
이제 카테고리를 UIViewController
가져와 내비게이션 컨트롤러에서 메소드를 호출 할 수 있습니다 ( 예 :
#import "UINavigationController+TransparentNavigationController.h"
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.navigationController presentTransparentNavigationBar];
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[self.navigationController hideTransparentNavigationBar];
}
And a similar solution in Swift:
import Foundation
import UIKit
extension UINavigationController {
public func presentTransparentNavigationBar() {
navigationBar.setBackgroundImage(UIImage(), forBarMetrics:UIBarMetrics.Default)
navigationBar.translucent = true
navigationBar.shadowImage = UIImage()
setNavigationBarHidden(false, animated:true)
}
public func hideTransparentNavigationBar() {
setNavigationBarHidden(true, animated:false)
navigationBar.setBackgroundImage(UINavigationBar.appearance().backgroundImageForBarMetrics(UIBarMetrics.Default), forBarMetrics:UIBarMetrics.Default)
navigationBar.translucent = UINavigationBar.appearance().translucent
navigationBar.shadowImage = UINavigationBar.appearance().shadowImage
}
}
Alan forgot one line
self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
So I have:
[self.navigationController.navigationBar setTranslucent:YES];
self.navigationController.view.backgroundColor = [UIColor clearColor];
[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.shadowImage = [[UIImage alloc] init];
self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
@Zorayr's great answer revised to Swift 3 :
import Foundation
import UIKit
extension UINavigationController {
public func presentTransparentNavigationBar() {
navigationBar.setBackgroundImage(UIImage(), for:.default)
navigationBar.isTranslucent = true
navigationBar.shadowImage = UIImage()
setNavigationBarHidden(false, animated:true)
}
public func hideTransparentNavigationBar() {
setNavigationBarHidden(true, animated:false)
navigationBar.setBackgroundImage(UINavigationBar.appearance().backgroundImage(for: UIBarMetrics.default), for:.default)
navigationBar.isTranslucent = UINavigationBar.appearance().isTranslucent
navigationBar.shadowImage = UINavigationBar.appearance().shadowImage
}
}
Swift 4.2 and iOS 12
It turns out all you really need is the code below. It works perfectly when you put it into viewDidLoad()
.
// removes line at bottom of navigation bar
navigationController?.navigationBar.shadowImage = UIImage()
// makes navigation bar completely transparent
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
navigationController?.navigationBar.isTranslucent = true
Use UINavigationBar+Addition pod, then simply call:
UINavigationBar *navigationBar = self.navigationController.navigationBar;
[navigationBar makeTransparent];
[(UIView*)[self.navigationController.navigationBar.subviews objectAtIndex:0] setAlpha:0.0f];
That one line seemed to work perfectly for me
'Programing' 카테고리의 다른 글
슬래시가 포함 된 문자열을 sed로 바꾸는 방법은 무엇입니까? (0) | 2020.07.05 |
---|---|
Vaadin Framework를 사용해야합니까? (0) | 2020.07.05 |
빨간색 오류를 표시하는 Android Studio 인라인 컴파일러이지만 gradle을 사용한 컴파일은 정상적으로 작동합니다. (0) | 2020.07.05 |
오류 : ': app : compileDebugKotlin'작업에 대한 실행이 실패했습니다. (0) | 2020.07.05 |
jQuery로 현재 시간을 얻는 방법 (0) | 2020.07.05 |