UINavigationBar 뒤로 숨기기 버튼 텍스트


104

UINavigation 컨트롤러에서 뒤로 버튼 텍스트를 숨기려면 어떻게해야합니까? "<뒤로"가 아닌 "<"만 표시됩니다.


1
기본 텍스트를 수정할 수 없습니다. 대신 navigationItem.leftBarButtonItem을 사용하여 사용자 지정 뒤로 단추를 설정하십시오
BaSha


모양 프록시를 사용하는 글로벌 솔루션을 원한다면 아래 내 대답을 참조하십시오.
fl034

답변:


107

인터페이스 빌더 에서 이전 컨트롤러의 탐색 항목을 선택 Back Button하고 뒤로 버튼을 표시 할 문자열로 변경할 수 있습니다. 예를 들어 공백을 원하면 공백을 넣으십시오.

다음 코드 줄로 변경할 수도 있습니다 .

[self.navigationItem.backBarButtonItem setTitle:@"Title here"];

또는 Swift에서 :

self.navigationItem.backBarButtonItem?.title = ""


2
최고 팁, 인터페이스 빌더의 빈 공간을 설정하는 방법에 대한 하나 ... - D
펠리페 페라이트

9
인터페이스 빌더와 스위프트 프로그램 노선, 스위프트 3 엑스 코드 8.3.2에 나를 위해 작동하지 않았다
아그립바

앱을 통해 모든 뒤로 버튼을 숨기는 매우 간단한 솔루션 을 확인할 수 있습니다 . 추신 : 자신의 코드 제로 라인이 필요
Pratik Jamariya

2
Back ButtonIB에 이미 공백이있는 경우 탑승 할 공간을 추가 Back하고 화살표 만 표시하면됩니다.
Tejas K

3
이 방법은 현재 인터페이스 빌더에서만 작동합니다. 코드에서 설정하면 작동하지 않습니다. 전체 backBarButtonItem을 다음과 같이 설정해야하는 제목 만 설정하는 대신 : navigationItem.backBarButtonItem = UIBarButtonItem (title : "", style : .plain, target : nil, action : nil)
Leszek Szary

81

스토리 보드를 통해서도 가능합니다. 이전 컨트롤러 탐색 항목의 속성 검사기에서 에서 뒤로 버튼 필드에 ""를 설정할 수 있습니다. 아래 이미지를 참조하십시오. "여기에 제목"을 ""로 바꿉니다. 이렇게하면 원하는 결과를 얻을 수 있습니다. 더 이상 '제목'을 엉망으로 만들 필요가 없습니다.

프로그래밍 방식으로 사용할 수 있습니다.

[self.navigationItem.backBarButtonItem setTitle:@" "];

여기서 self 는 원하는 뷰 컨트롤러를 푸시하는 컨트롤러를 나타냅니다.

Xcode보기 컨트롤러 탐색 항목

탐색 모음 이전, 이후 샘플

전에 전에

후


7
스토리 보드에 설정된 경우 완벽하게 작동합니다. 설정이 가능하도록 내비게이션 바에 내비게이션 항목이 있는지 확인하십시오.

11
iOS 9 / Xcode 7.3에서는 backBarButtonItem프로그래밍 방식으로 설정이 작동하지 않지만 스토리 보드를 통해 설정하면 작동합니다.
스콧 가드너

@ScottGardner, iOS 9에서 backBarButtonItem프로그래밍 방식으로 설정이 작동합니다.
Suragch

화면에 탐색 표시 줄이없는 경우 숨겨야하기 때문에 스토리 보드의 탐색 항목을 이전보기 컨트롤러에 추가하고 뒤로 버튼을 ""로 설정할 수 있습니다.
Martin Berger

솔루션 / 아이폰 OS (11) 엑스 코드 9.2에서 구현하기가 매우 쉽습니다 위대한 일
레이 헌터

78

다음 UINavigationControllerDelegate과 같이 구현할 수 있습니다 .

이전 Swift

func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) {
    let item = UIBarButtonItem(title: " ", style: .Plain, target: nil, action: nil)
    viewController.navigationItem.backBarButtonItem = item
}

스위프트 4.x

class MyNavigationController: UINavigationController, UINavigationControllerDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.delegate = self
    }

    func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
        let item = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
        viewController.navigationItem.backBarButtonItem = item
    }
}

backBarButtonItem이다 nil기본적으로 당신은 단지 모든 컨트롤러로 설정 있도록 다음, 컨트롤러를 밀어 영향을


6
감사합니다! 이것은 4 개의 중복 질문과 수십 개의 답변을 살펴본 후 (다른 것을 엉망으로 만들지 않고) 효과가 있었던 유일한 솔루션입니다.
inket

1
나는 이미 내비게이션 컨트롤러 하위 클래스를 가지고 있었고 이것이 완벽하게 작동했습니다. 그래도 Swift 3에 대해 업데이트해야합니다.
Dean Kelly

훌륭한 솔루션 감사합니다. 나를 위해 일관되게 일한 유일한 솔루션입니다.
Elliott Davies

매력처럼 웍스.
tounaobun

48

뒤로 버튼의 제목을로 설정 @""하거나 nil작동하지 않습니다. 전체 버튼을 비워 두어야합니다 (제목이나 이미지 제외).

목표 -C

[self.navigationItem setBackBarButtonItem:[[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil]];

빠른

self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)

이 작업은 탐색 스택의 뷰 컨트롤러 상단에있는 뷰 컨트롤러에서 수행해야합니다 (즉, pushViewController메서드 를 통해 VC로 이동하는 위치에서 ).


2
감사합니다, 작동합니다! 신속하게 : self.navigationItem.backBarButtonItem = UIBarButtonItem (title : "", style : .Plain, target : nil, action : nil)
mostworld77

훌륭한 대답 .. 기본 backBarButtonItem의 제목을 변경하는 것만으로는 충분하지 않다는 것을 올바르게 지적합니다. backBarButtonItem이 이전 뷰 컨트롤러에서 설정되어야한다는 언급에 대한 보너스 포인트입니다.
Crazed'n'Dazed

30

뷰 컨트롤러가 많은 상황에서이 문제에 대한 또 다른 해결책은 UIAppearance프록시를 사용하여 다음과 같이 뒤로 버튼 제목 텍스트를 효과적으로 숨기는 것입니다.

UIBarButtonItem *navBarButtonAppearance = [UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil];

[navBarButtonAppearance setTitleTextAttributes:@{
    NSFontAttributeName:            [UIFont systemFontOfSize:0.1],
    NSForegroundColorAttributeName: [UIColor clearColor] }
                                      forState:UIControlStateNormal];

이 솔루션은 뒤로 버튼 제목을 수동으로 설정하는 것과 유사하게 텍스트를 작은 명확한 점으로 렌더링합니다. @" " 모든 탐색 모음 버튼에 영향을 준다는 점을 제외하고 합니다.

모든 탐색 모음 버튼에 영향을 미치기 때문에이 문제에 대한 일반적인 해결책은 아닙니다. 제목 을 숨길 때가 아니라 버튼 제목 을 표시 할 때를 선택할 수 있도록 패러다임을 뒤집습니다 .

제목을 표시 할시기를 선택하려면 필요에 따라 제목 텍스트 속성을 수동으로 복원하거나 UIBarButtonItem동일한 작업을 수행 하는 특수 하위 클래스를 만듭니다 (잠재적으로 다른 UIAppearance프록시 사용).

대부분의 뒤로 버튼 제목을 숨겨야하는 앱이 있고 탐색 버튼 중 일부 (또는 아예 없음) 만 제목이있는 시스템 버튼 인 경우 이것이 적합 할 수 있습니다!

(참고 : 긴 제목으로 인해 중앙 탐색 모음 제목이 이동하지 않도록하려면 텍스트 색상이 명확하더라도 글꼴 크기를 변경해야합니다.)


내 구현을위한 가장 쉬운 솔루션이었습니다. 감사.
Trevor Panhorst

3
이것은 뒤로 버튼이 아닌 왼쪽 바 버튼 항목도 가리지 않습니까?
kevinl

1
네, 많이 기록했습니다. "모든 탐색 모음 버튼에 영향을 미칩니다."
Adam Kaplan

2
왼쪽 / 오른쪽 막대 버튼 항목을 포함하여 탐색 막대의 다른 모든 버튼에 영향을주지 않아야합니까?
Fyodor Volchyok

예, 그는 더 포괄적 인 요구 사항을 지정하지 않았습니다.
Adam Kaplan

30

viewDidLoad 또는 loadView에 다음 코드를 추가합니다.

self.navigationController.navigationBar.topItem.title = @"";  

iOS 9가 설치된 iPhone 및 iPad에서 테스트했습니다.


20
이전 뷰 컨트롤러의 제목이 명확하지 않습니까?
CalZone

6
이 마지막 화면 제목 제거하기 때문에 사용하지 마십시오
evya

현재 뷰 컨트롤러에서해야하는 경우 이전 vc에서 제목을 제거하지 않으려면 다음을 수행해야합니다. navigationController? .navigationBar.topItem? .backBarButtonItem = UIBarButtonItem (title : "", style : .plain, target : nil, 조치 : 무기 호)
Leszek이 Szary

15

이 Objective-C 카테고리를 추가하여 내비게이션 컨트롤러에 의해 생성 된 모든 "뒤로"버튼에 텍스트가 없도록 할 수 있습니다. 방금 AppDelegate.m 파일에 추가했습니다.

@implementation UINavigationItem (Customization)

/**
 Removes text from all default back buttons so only the arrow or custom image shows up.
 */
-(UIBarButtonItem *)backBarButtonItem
{
    return [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
}

@end

추신-(이 확장 기능을 Swift와 함께 사용하는 방법을 모르겠습니다. 이상한 오류가 발생했습니다. Swift 버전 추가를 환영합니다.)


이것은하지 숨길 제목 제목 "뒤로"를 제공
라즈 Aggrawal

정말 override신속하게 처리 하는 방법 . 매우 흥미로운 질문
안드레이 가갠

@teradyl이 최고의 답변입니다.
aks.knit1108

@Andrey Gagan, 내 대답 참조
Abirami Bala

이것은 iOS 9.0-10.3.3에서 작동하지만 iOS 11 이상에서는 작동하지 않습니다.
Sihad 베고 비치

14

위아래로 시도했지만 작동하지 않았습니다. 이것은 나를 위해 일했습니다.

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationController?.navigationBar.topItem?.title = ""
}

1
현재 뷰 컨트롤러에서해야하는 경우 이전 vc에서 제목을 제거하지 않으려면 다음을 수행해야합니다. navigationController? .navigationBar.topItem? .backBarButtonItem = UIBarButtonItem (title : "", style : .plain, target : nil, 조치 : 무기 호)
Leszek이 Szary

11

부작용없이 작동하는 유일한 방법은 사용자 지정 뒤로 버튼을 만드는 것입니다. 사용자 지정 동작을 제공하지 않는 한 슬라이드 제스처도 작동합니다.

extension UIViewController {
func setupBackButton() {
    let customBackButton = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
    navigationItem.backBarButtonItem = customBackButton
}}

안타깝게도의 모든 뒤로 버튼에 제목이 없도록하려면 모든 뷰 컨트롤러에서이 맞춤 뒤로 버튼을 설정해야합니다.

override func viewDidLoad() {
    super.viewDidLoad()

    setupBackButton()
}

공백 문자열이 아닌 제목으로 공백을 설정하는 것이 매우 중요합니다.


9

프로그래밍 방식으로 뒤로 버튼에서 텍스트를 제거하려면 코드 아래에서 사용하면 xcode7 이상에서 작동합니다.

self.navigationController.navigationBar.topItem.title = @ "";

또는

스토리 보드에서 수동으로보기 컨트롤러의 탐색 모음을 선택하고 뒤로 단추 텍스트에 ""를 입력합니다.

작동합니다. 감사


2
이 사람은 너무 navigationItem 제목을 제거합니다
케르 Baltaci에게

나는 이것에 대한 당신의 대답을 편집했습니다 : self.navigationController?.navigationBar.topItem?.title = " "Xcode 9에서 일했습니다!
MHSFisher

현재 뷰 컨트롤러에서 수행해야하는 경우 이전 vc에서 제목을 제거하지 않으려면 다음을 수행해야합니다. navigationController? .navigationBar.topItem? .backBarButtonItem = UIBarButtonItem (title : "", style : .plain, target : nil, 조치 : 무기 호)
Leszek이 Szary

8

현재 답변은 작동하지 않았습니다. 제목제거하고 싶었습니다. 완전히 "뒤로"라는 텍스트는 사라지지 않았습니다.

이전 뷰 컨트롤러로 돌아가서 제목 속성을 설정합니다.

self.title = @" ";

이전 View Controller에 제목이 없을 때만 작동합니다.


@ZevEisenberg는 View Controller의 수명주기에 표시되기 전에 속성이 설정되었는지 확인합니다. viewDidLoad 또는 viewWillAppear 메소드에서 설정하는 것을 의미합니다.
ChrisHaze

1
또한 따옴표 사이 에 공백 을 포함해야 합니다.
ChrisHaze

1
실제로 공백 없이 나를 위해 일하게되었습니다 . 그냥 좋은 오래된 빈 문자열 : @"".
Zev Eisenberg

1
@ZevEisenberg, 솔루션을 처음 생각해 냈을 때는 Xcode 5의 초기 단계였습니다. 공백이있는 유일한 방법 이었기 때문에 샘플 코드에 포함 시켰습니다. Xcode 6 업데이트에 포함되어 있어야합니다. 알고 좋은 - THX
ChrisHaze

나는 또한 여전히 작동하는 내 접근 방식을 사용했으며 실제로 표준 뒤로 화살표도 제거했습니다.
ChrisHaze

5

다른 방법-사용자 정의 NavigationBar 클래스를 사용하십시오.

class NavigationBar: UINavigationBar {

    var hideBackItem = true
    private let emptyTitle = ""

    override func layoutSubviews() {
        if let `topItem` = topItem,
            topItem.backBarButtonItem?.title != emptyTitle,
            hideBackItem {
            topItem.backBarButtonItem = UIBarButtonItem(title: emptyTitle, style: .plain, target: nil, action: nil)
        }

        super.layoutSubviews()
    }

}

즉, 이것은 전체 프로젝트 제목을 제거합니다. UINavigationController에 대한 사용자 정의 클래스를 설정하십시오.


4

이전 VC의 제목을 공백이있는 ""문자열로 설정합니다. 뒤로 버튼이있는 제목은 단일 공백 ​​문자열로 대체됩니다.

Self.title = " "

다시 누르면 viewWillAppear에서 원래 제목으로 제목이 재설정됩니다.


4

NavigationController재정의 하는 사용자 지정 사용pushViewController

class NavigationController: UINavigationController {  
  override func pushViewController(_ viewController: UIViewController, animated: Bool) {
    viewController.navigationItem.backBarButtonItem =
      UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
    super.pushViewController(viewController, animated: animated)
  }
}

4

이미 많은 답변이 있습니다. 여기에 주제에 대한 2 센트가 있습니다. 이 접근 방식이 정말 강력하다는 것을 알았습니다. segue 전에 이것을 viewController에 넣어야합니다.

스위프트 4 :

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}

2
예! 감사합니다 :)
Hews

3

이 게시물에서 모든 것을 시도했습니다. 유일한 해결책은 @VoidLess의

여기에 같은 대답이지만 더 완벽합니다.

class CustomNavigationController: UINavigationController {

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.delegate = self
    }
}


// MARK:UINavigationControllerDelegate
extension CustomNavigationController {
    func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
        viewController.navigationItem.backBarButtonItem = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
    }
}

3

이것은 iOS11에 대한 내 해상도이며 applicationDidFinishLaunchingWithOptions에서 UIBarButtonItem의 모양을 변경합니다.

UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(-100, 0), for:UIBarMetrics.default)

Y 오프셋은 iOS11에서도 백바 버튼의 위치를 ​​변경하므로 변경할 수 없지만 iOS10 이하에서는 괜찮습니다.


1
작동하지만 애니메이션 중에 왼쪽으로 움직이는 이전 제목을 볼 수 있습니다. 약간 버그가있는 것 같습니다.
Jonathan

2

Swift3에서는

글로벌 설정을하는 경우

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    // ..

    let BarButtonItemAppearance = UIBarButtonItem.appearance()
    BarButtonItemAppearance.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .normal)
    BarButtonItemAppearance.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .highlighted)


    // ...

}

1
이렇게하면 뒤로 버튼뿐만 아니라 앱 어딘가에있을 수있는 다른 모든 막대 버튼의 색상도 투명으로 변경됩니다.
Leszek Szary

2

Swift 3.1 UINavigationController의 delegate 메소드를 구현하여이를 수행 할 수 있습니다.

func navigationController(_ navigationController: UINavigationController, 
                          willShow viewController: UIViewController, animated: Bool) {

    /** It'll hide the Title with back button only,
     ** we'll still get the back arrow image and default functionality.
     */
    let item = UIBarButtonItem(title: " ", style: .plain, target: nil, 
                               action: nil)
    viewController.navigationItem.backBarButtonItem = item
}

최고의 답변!
evya

2

뒤로 버튼 제목을 전체적으로 숨기려는 사람들을 위해.

당신은 스위 즐링 (swizzle) 수 viewDidLoadUIViewController이 같은.

+ (void)overrideBackButtonTitle {

    NSError *error;

    // I use `Aspects` for easier swizzling.

    [UIViewController aspect_hookSelector:@selector(viewDidLoad)
                              withOptions:AspectPositionBefore
                               usingBlock:^(id<AspectInfo> aspectInfo)
    {

        UIViewController *vc = (UIViewController *)aspectInfo.instance;

        // Check whether this class is my app's view controller or not.
        // We don't want to override this for Apple's view controllers,
        // or view controllers from external framework.

        NSString *className = NSStringFromClass([vc class]);
        Class class = [NSBundle.mainBundle classNamed:className];
        if (!class) {
           return;
        }

        UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStylePlain target:nil action:nil];
        vc.navigationItem.backBarButtonItem = backButton;

    } error:&error];

    if (error) {
        NSLog(@"%s error: %@", __FUNCTION__, error.localizedDescription);
    }

}

용법:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [[self class] overrideBackButtonTitle];
    return YES;
}

2

iOS 13 이상을 대상으로 하는 경우이 새로운 API 를 사용 하여 전체적으로 뒤로 버튼 제목숨길 수 있습니다 .

let backButtonAppearance = UIBarButtonItemAppearance()
backButtonAppearance.normal.titleTextAttributes = [.foregroundColor: UIColor.clear]

UINavigationBar.appearance().standardAppearance.backButtonAppearance = backButtonAppearance
UINavigationBar.appearance().compactAppearance.backButtonAppearance = backButtonAppearance
UINavigationBar.appearance().scrollEdgeAppearance.backButtonAppearance = backButtonAppearance

1
이것은 최적이 아닙니다. 사용자가 일반 텍스트가있는 레이블을 탭해도 뒤로 작업이 계속 트리거됩니다.
dvdblk

1

커스텀 내비게이션 컨트롤러가 있었기 때문에이 문제로 어려움을 겪었습니다. 내 사용자 지정 탐색 컨트롤러 클래스에서이 코드를 사용하여 모든 뷰 컨트롤러에서 뒤로 항목 텍스트를 제거 할 수있었습니다. override func viewDidLayoutSubviews() { self.navigationBar.backItem?.title = "" }

이렇게하면이 사용자 지정 탐색 컨트롤러를 사용하여 뒤로 항목 제목이 모두 제거됩니다.


1
이것에 대한 업데이트 : 이것은 작동하지만 나를 괴롭히는 로딩 지연이 있습니다. 이제 App 대리자 didLaunchWithOptions에 'let BarButtonItemAppearance = UIBarButtonItem.appearance () BarButtonItemAppearance.setTitleTextAttributes ([NSAttributedStringKey.foregroundColor : UIColor.clear], for : .normal)'를 추가했으며 완벽하게 작동합니다!
Amy.R

0

iOS 11에서 UIBarButtonItem모양의 텍스트 글꼴 / 색상을 매우 작은 값 또는 명확한 색상으로 설정하면 다른 막대 항목이 사라지는 것을 발견했습니다 (시스템이 더 이상 UIBarButton 항목의 클래스를 따르지 않고으로 변환 됨 _UIModernBarButton). 또한 뒷면 텍스트의 오프셋을 오프 스크린으로 설정하면 대화 형 팝 중에 플래시가 발생합니다.

그래서 우리는 addSubView:

+ (void)load {
    if (@available(iOS 11, *)) {
        [NSClassFromString(@"_UIBackButtonContainerView")     jr_swizzleMethod:@selector(addSubview:) withMethod:@selector(MyiOS11BackButtonNoTextTrick_addSubview:) error:nil];
    }
}

- (void)MyiOS11BackButtonNoTextTrick_addSubview:(UIView *)view {
    view.alpha = 0;
    if ([view isKindOfClass:[UIButton class]]) {
        UIButton *button = (id)view;
        [button setTitle:@" " forState:UIControlStateNormal];
    }
    [self MyiOS11BackButtonNoTextTrick_addSubview:view];
}

0
-(void)setNavigationItems{
     UIBarButtonItem *leftBarButtonItem=[[UIBarButtonItem alloc]initWithTitle:@"**Your title here**" style:UIBarButtonItemStyleBordered target:self action:@selector(backButtonClicked)];   
     self.navigationController.navigationBar.topItem.backBarButtonItem=leftBarButtonItem;
}
-(void)backButtonClicked{
    [self.navigationController popViewControllerAnimated:YES];
}

0

백 텍스트는 지난보기 컨트롤러의 출신 navigationItem.titlenavigationItem.title를 automaticly에 의해 설정된다 self.title. 문제를 해결하는 쉬운 방법은 후크입니다 setTitle:.navigationItem.title = @""

이 코드를 넣으면 AppDelegate.m괜찮습니다。

    [UIViewController aspect_hookSelector:@selector(setTitle:)
                              withOptions:AspectPositionAfter
                               usingBlock:^(id<AspectInfo> aspectInfo, NSString *title) {
        UIViewController *vc = aspectInfo.instance;
        vc.navigationItem.titleView = ({
            UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
            titleLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];
            titleLabel.text = title;
            titleLabel;
        });
        vc.navigationItem.title = @"";
    } error:NULL];

자세한 내용은 https://www.jianshu.com/p/071bc50f1475(Simple Chinease)에서


0

내 솔루션 :-XCode : 10.2.1-Swift : 5

  • 상위 뷰 컨트롤러 :
    • self.title = ""
  • 자식 뷰 컨트롤러 :
    • self.navigationItem.title = "Your title"// 뷰 컨트롤러의 제목 설정

0

XCode 11.5 스위프트 5

사용자 정의 뒤로 버튼이 필요하지 않은 경우 프로그래밍 방식으로 수행하는 매우 간단한 방법은 아마도 약간의 해키가 있지만 다음과 같이 호출하여 스택에 푸시하는 뷰 컨트롤러에서 글꼴 크기를 0으로 설정하는 것입니다. viewDidLoad에서

private func setupNavBar() {
    let appearance = UINavigationBarAppearance()
    appearance.configureWithDefaultBackground()
    
    let backButtonAppearance = UIBarButtonItemAppearance()
    backButtonAppearance.normal.titleTextAttributes = [.font: UIFont(name: "Arial", size: 0)!]
    appearance.backButtonAppearance = backButtonAppearance

    navigationItem.standardAppearance = appearance
    navigationItem.scrollEdgeAppearance = appearance
    navigationItem.compactAppearance = appearance
}

-1

마침내 전체 앱에서 기본 백 텍스트를 숨기는 완벽한 솔루션을 찾았습니다.

투명한 이미지 하나를 추가하고 AppDelegate에 다음 코드를 추가하기 만하면됩니다.

UIBarButtonItem.appearance().setBackButtonBackgroundImage(#imageLiteral(resourceName: "transparent"), for: .normal, barMetrics: .default)

-2

다음 방법은 iOS 11에서 작동하며 다른 iOS 버전에서 충돌하지 않는 것이 안전합니다. 이렇게하면 UIModernBarButton 및 UIBackButtonContainerView가 모두 비공개 API이기 때문에 앱 스토어 검토에서 앱이 거부 될 수 있습니다. AppDelegate에 배치합니다.

    if
        let UIModernBarButton = NSClassFromString("_UIModernBarButton") as? UIButton.Type,
        let UIBackButtonContainerView = NSClassFromString("_UIBackButtonContainerView") as? UIView.Type {

        let backButton = UIModernBarButton.appearance(whenContainedInInstancesOf: [UIBackButtonContainerView.self])
        backButton.setTitleColor(.clear, for: .normal)
    }

이렇게하면 UIModernBarButton 및 UIBackButtonContainerView가 모두 비공개 API이기 때문에 앱 스토어 검토에서 앱이 거부 될 수 있습니다.
Groot

감사합니다 @Groot, 경고를 추가했습니다.
Patrick

-5

Swift 버전은 전 세계적으로 완벽하게 작동합니다.

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

        UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Normal)
        UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Highlighted)

        return true
    }

7
다시 돌아 가지 않는 rightBarButtons 및 leftBarButtons도 모든 텍스트 를 숨길 것임을 추가해야합니다 .
limfinity

이것은 solution. @limfinity가 지적했듯이,이 앱을 통해 모든 UIBarButtonItem의를 위해 보편적으로 변경됩니다
Danut Pralea

내가 그것을 응용 프로그램 전반에 걸쳐 모든 UIBarButtonItem의 텍스트 숨길 것, @limfinity 및 Danut Pralea에 동의
Pratik Jamariya
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.