iOS UIBarButtonItem의 제목 텍스트 제거


198

내가하고 싶은 UIBarButtonItem것은 탐색 표시 줄에 파란색 쉐브론 만 남기고 의 '뒤로'버튼에서 텍스트를 제거하는 것 입니다. iOS 7 용으로 개발 중임을 명심하십시오. 다음과 같은 여러 가지 방법을 시도했습니다.

이것은 내가 좋아하지 않은 이미지 방법입니다 (이미지가 제대로 보이지 않았습니다).

UIBarButtonItem *barBtnItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"iOS7BackButton"] style:UIBarButtonItemStylePlain target:self action:@selector(goToPrevious:)];
self.navigationItem.leftBarButtonItem = barBtnItem;

내가 시도한 또 다른 방법은 이것이 작동하지 않았습니다 (아무것도 표시되지 않음).

UIBarButtonItem *barBtn = [[UIBarButtonItem alloc]init];
barBtn.title=@"";
self.navigationItem.leftBarButtonItem=barBtn;

내가 달성하고 싶었던 것은 단일 셰브론 만 특징 인 iOS 7 Music 앱의 뒤로 버튼과 같은 것입니다.

감사.



요구 사항이 무엇인지 이미지를 보지 않겠습니까? leftBarButtonItem에서 참조하십시오.
— Vishal Sharma

그림 방법을 사용하지 않은 이유는 1입니다. 뒤로 버튼의 완벽한 그림을 얻기가 매우 어렵고 2입니다. 나는 이것을 기본적으로 달성하는 방법에 대한 도움을 받기 위해 StackOverflow에 갔다.
— Pan Ziyue

답변:


198
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-60, -60)
                                                         forBarMetrics:UIBarMetricsDefault];

그런 다음 뒤로 단추 항목 제목을 제거 할 수 있습니다.

스토리 보드를 사용하는 경우 탐색 속성 관리자 뒤로 버튼을 공백으로 설정할 수 있습니다.


95
큰 제목에는 문제가 있습니다. 제목이 중앙에 있지 않고 뒤로 버튼 텍스트가 여전히있는 것처럼 오른쪽으로
— 밉니다

11
사용자가 "접근성-버튼 모양"을 설정 한 경우 작동하지 않습니다.
— Mikael Bartlett

22
나는이 더 나은 답변을 생각 :[[UIBarButtonItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor clearColor]} forState:UIControlStateNormal];
— 벤자민

19
마법의 숫자가 들어있는 솔루션은 나쁜 생각입니다. 자동 레이아웃에 대한 푸시, 이와 같은 상수 값을 사용하는 크기 클래스, 접근성 기능 등을 사용하면 물릴 수 있습니다.
— Michael Peterson

3
벤자민의 의견을 개선하기 UIControlStateHighlighted
— 위해서도

411

제목을 변경하지 않고 뷰 컨트롤러의 뒤로 단추 제목을 설정하려면 다음을 사용하십시오.

목표 -C :

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

빠른:

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

분명히, 이것은 뒤로 버튼을 눌렀을 때 볼 수있는 뷰 컨트롤러에서 수행됩니다. 즉, '<Settings'를 보는 대신 '<'를보고 싶은 경우 SettingsViewController에서이를에 넣으십시오 init. 그러면 뷰 컨트롤러 자체를 볼 때 제목에 표시되지 않는 문제가 발생하지 않습니다.


1
왜 다른 답변이 올바른 것으로 표시되는지 모르겠지만 제목을 제거하기 때문에 뒤로 버튼에 "제목"이 표시되지만 올바른 방법은 아닙니다! 이것이 정답이어야합니다.
— Pach

8
또한 Swift를 사용하는 사람에게는 navigationItem.backBarButtonItem = UIBarButtonItem (title : "", style : .Plain, target : nil, action : nil)입니다. Obj-C에서 Swift로 변환하는 것은 어렵지 않지만 문제를
— 해결해

15
@BenjaminPiette UIViewController에서 이것을 호출하고 뒤로 버튼을 눌렀을 때 볼 수 있습니까? 뒤로 버튼을 표시하는 UIViewController가 아닙니다.
— DonnaLea

2
정말 우아한 해결책입니다! 감사. 오프셋 일을하는 것이 옳지 않다고 생각했습니다.
— hyd00

2
이 솔루션은 탐색 스택의 이전 컨트롤러에서이 코드 줄을 작성하는 경우 완벽하게 작동합니다.
— Bohdan Savych 2012

128

스토리 보드를 사용 Attributes Inspector하는 경우 ViewController 로 이동하여 Navigation Item(을 클릭 Navigation Bar) Back Button속성을 ""(한 공백 문자)로 설정할 수 있습니다. 뒤로 단추 제목을 공백 문자 하나로 설정하여 갈매기 모양 표시를 유지합니다. 코드를 망칠 필요가 없습니다.

이미지 예

이렇게하면 이 컨트롤러 내부에 표시 되는 것이 아니라 상단 버튼을 눌렀을 때이 View Controller에 표시되는 뒤로 단추의Back Button 제목 이 설정 됩니다.Back Button


10
"이것은 더 많이 투표 할 수 있기를 바랍니다."이것은이 뷰 컨트롤러에 표시되는 뒤로 단추의 뒤로 단추 제목을 설정합니다. 제어 장치!"
— Jayson Lane 19

121

이것은 텍스트없이 '뒤로'쉐브론을 표시하는 데 효과적입니다.

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

viewDidLoad탐색 막대를 표시하는 View Controller 에서이 속성을 설정 하면 트릭이 수행됩니다.

참고 : iOS 7에서만 문제를 테스트했습니다.


33
탐색 모음의 중간에있는 제목 레이블을 제거하면 부작용이 발생합니다.
— Pwner

7
동일한 속성으로 'viewWillAppear'에서 푸시 VC의 제목을 설정하십시오. 이런 식으로 제거되지 않습니다.
— 구토 아라 우호

5
-viewDidLoadBack 텍스트를 원하지 않는 VC로 해당 코드 조각을 옮겼습니다 . 그러나 나중에 알게 된 navigationController것은 제목 텍스트 에서 두 번째 VC를 팝업하면 즉시가 아니라 직후 나타납니다. : 나는 비디오가 더 나은 그래서 여기에 이것을 설명 할 것이 추측 링크
— 팬 Ziyue

1
이것은 최선의 답변이 아닙니다. andyleehao의 답변을 참조하십시오. [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment : UIOffsetMake (0, -60) forBarMetrics : UIBarMetricsDefault];
— lmnbeyond

1
애플의 문서에 따르면, 정답은 다음과 같습니다. "수신기가 탐색 항목 스택에 있고 최상위에서 두 번째 인 경우, 즉 뷰 컨트롤러가 사용자가 다시 탐색 할 뷰 (이 속성의 값)를 관리합니다. 이 속성의 값이 nil이면 시스템은 "뒤로"문자열을 뒤로 버튼의 텍스트로 사용합니다. "
— Raphael Oliveira

27

버튼 제목을 설정할 때는 @ ""대신 @ ""를 사용하십시오.

--편집하다--

다른 줄을 시도 할 때 어떤 변화가 있습니까? 다음 코드를 성공적으로 사용하고 있습니다.

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:backString style:UIBarButtonItemStyleDone target:nil action:nil];
[[self navigationItem] setBackBarButtonItem:backButton];

backString은 iOS 7 이하 버전인지에 따라 @ ""또는 @ "Back"으로 설정되는 변수입니다.

한 가지 주목할 점은이 코드가 뒤로 버튼을 사용자 정의하려는 페이지의 컨트롤러에 없다는 것입니다. 실제로 네비게이션 스택에 컨트롤러 앞에 있습니다.


흠, iOS 7은 그것을 바꾸지 않는 것 같습니다. 제목으로 "뒤로"를 계속 사용합니다. setLeftBarButtonItem:backButton대신 넣어두면 아무것도 없습니다.
— Pan Ziyue

1
이 경우 제목을 다른 것으로 설정할 때 아무 일도 일어나지 않으면 코드를 부모보기 컨트롤러로 이동해야한다고 생각합니다. 위의 PreparingForSegue 메소드에 게시 한 코드를 사용하고 있습니다.
— Kamaros

27

여기에 이미지 설명을 입력하십시오

때로는 상황에 맞는 것을 보는 것이 도움이됩니다. 다음은 "뒤로"텍스트를 숨기지 만 여전히 화살표를 표시하는 최소 프로젝트입니다.

스토리 보드

여기에 이미지 설명을 입력하십시오

"두 번째 뷰 컨트롤러 표시"버튼에서 두 번째 뷰 컨트롤러로 표시되는 쇼가 있습니다.

또한 제목을 갖도록 탐색 항목을 두 번째보기 컨트롤러에 추가했습니다. 이것은 선택 사항입니다. 뒤로 버튼에는 영향을 미치지 않습니다.

암호

FirstViewController.swift

import UIKit
class FirstViewController: UIViewController {

    @IBAction func showSecondViewControllerButtonTapped(sender: UIButton) {

        // hide the back button text
        navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
    }
}

SecondViewController.swift

import UIKit
class SecondViewController: UIViewController {
    // Nothing at all needed here
}

대체 방법 (IB 만, 코드 없음)

스토리 보드에서 첫 번째 보기 컨트롤러 (두 번째 아님) 의 탐색 항목을 선택하십시오 . 뒤로 버튼 텍스트를위한 공간을 입력하십시오.

여기에 이미지 설명을 입력하십시오


"첫 번째 뷰 컨트롤러 (두 번째가 아닌)"의 핵심 개념은 다시 돌아올 VC의 이름이므로이 제목을 지정해야합니다.
— buguibu

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

1
topItem 대신 backItem을 사용할 수 있습니다. TopItem은 제목을 숨기고 backItem은 뒤로 버튼 제목을 숨 깁니다.
— Ravi Ojha

2
스택 childViewController가있는 navigationController의 어린이 깊이 2+에있는 경우이 유일한 해결책이다
— 나다니엘 Blumer

2
이전 뷰 컨트롤러의 제목도 제거됩니다. 대부분의 경우에, 이것은 빨 것이다
— CalZone

11

iOS7에서 Apple은 UINavigationBar에 'backIndicatorTransitionMaskImage'와 'backIndicatorImage'라는 두 가지 새로운 속성을 도입했습니다.

한 번만 호출하면

[[UINavigationBar appearance] setBackIndicatorImage:[UIImage imageNamed:@"your_image"]];
[[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"your_image_mask"]];

기본 쉐브론 글리프 대신 사용자 정의 이미지를 렌더링하여 keyWindow의 색조 색상을 상속합니다.

제목을 제거하기 위해 Kamaros의 답변을 제안합니다. 새 뷰 컨트롤러를 푸시하는 뷰 컨트롤러에서이 코드를 호출해야합니다. iOS UIBarButtonItem의 제목 텍스트 제거


색조 색상을 조정하려면 [[UINavigationBar 모양] setTintColor : [UIColor whiteColor]];
— Mazen Kasser

10

제공된 답변으로 많은 성공을 거두지 못했지만 정말 간단한 해결책을 찾았습니다. 스토리 보드에서 UIViewController의 탐색 항목을 클릭하고 뒤로 버튼 텍스트를 설정할 수 있습니다. 나는 하나의 ''공간으로 설정하고 내가 찾던 행동을 주었다.여기에 이미지 설명을 입력하십시오


10

이것은 iOS10에서 저에게 효과적이었습니다. 뷰 컨트롤러의 viewDidLoad에서 이것을 호출하십시오.

self.navigationController?.navigationBar.topItem?.title = ""

6

iOS7과 6에서 작동하는이 문제에 대한 간단한 해결책은 viewDidLoad에서 사용자 정의 제목보기를 설정하는 것입니다.

- (void)viewDidLoad {

    [super viewDidLoad];

    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
    titleLabel.text = self.title;
    titleLabel.backgroundColor = [UIColor clearColor];

    [titleLabel sizeToFit];

    self.navigationItem.titleView = titleLabel;
}

그런 다음 viewWillAppear에서 안전하게 호출 할 수 있습니다.

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

제목보기는 사용자 정의보기이므로 탐색 스택에서 다시 이동할 때 덮어 쓰지 않습니다.


빈 UILabel이 아닌 코드의 후반 만 필요했습니다. [self.navigationItem.backBarButtonItem setTitle:@" "];viewWillAppear 에서 전화 했지만 모달보기를 닫은 후 표시되는 뷰에서 작동하지 않았습니다.
— Diziet

6

실제로 하나의 트릭 으로이 작업을 수행 할 수 있습니다.

UINavigationBar클래스를 재정의 하고 다음 코드 줄을 추가하십시오.

- (void)layoutSubviews{
    self.backItem.title = @"";
    [super layoutSubviews];
}

그런 다음 UINavigationController이 사용자 정의 UINavigationBar 클래스 등으로 초기화하십시오 .UINavigationController * navController = [[UINavigationController alloc] initWithNavigationBarClass:[CBCNavigationBar class] toolbarClass:nil];

도움이 되었기를 바랍니다


이것은 나를 위해 일했습니다. iOS 7의 푸시 애니메이션에 약간의 끊김 현상이있는 것처럼 보이지만 제목은 뒤로 버튼을위한 공간을 만드는 것으로 보이지만 아무것도 없기 때문에 가운데에 있습니다.
— zekel

예, navigationItem.title을 직접 설정하는 대신 사용자 정의 titleView를 사용해보십시오. 나는 그것이 당신의 문제를 해결해야한다고 생각합니다.
— rordulu

이 솔루션은 하위 클래스가있는 모든 navigationBar에 대해 전 세계적으로 훌륭합니다. 감사합니다
— Yetispapa

5

나는 DonnaLea의 답변을 사용하여 무언가를 함께 모을 수있었습니다. 이것이 UIViewController 서브 클래스에 솔루션이 나타나는 방법입니다.

var backItemTitle:String?

override func viewDidLoad() {
    super.viewDidLoad()

    //store the original title
    backItemTitle = self.navigationController?.navigationBar.topItem?.title

    //remove the title for the back button
    navigationController?.navigationBar.topItem?.title = ""
}

override func willMoveToParentViewController(parent: UIViewController?) {
    super.willMoveToParentViewController(parent)
    if parent == nil {

        //restore the orignal title
        navigationController?.navigationBar.backItem?.title = backItemTitle
    }
}

원래 답변의 문제점은 다시 팝업하면 컨트롤러에서 제목을 제거한다는 것입니다. viewWillDisappear에서 제목을 재설정하려고하면 전환 프로세스에서 너무 늦습니다. 애니메이션 효과가 뛰어나지 않고 타이틀이 다시 스냅됩니다. 그러나 willMoveToParentViewController는 더 빨리 발생하고 올바른 동작을 허용합니다.

주의 사항 : 나는 이것을 일반적인 UINavigationController 푸시 / 팝으로 만 테스트했습니다. 다른 상황에서는 예기치 않은 추가 동작이있을 수 있습니다.


4

첫 번째 ViewController의 PreparingForSegue : 메소드에서 뷰 제목을 @ ""로 설정하므로 다음 뷰를 누르면 이전 ViewController 제목 인 @ ""가 표시됩니다.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    self.navigationItem.title = @" ";
}

이것의 유일한 문제는 뒤로 버튼을 눌렀을 때 이전보기에 제목이 없으므로 viewWillAppear에 다시 추가 할 수 있다는 것입니다.

- (void)viewWillAppear:(BOOL)animated{
    self.navigationItem.title = @"First View Title";
}

나는이 솔루션을별로 좋아하지 않지만 작동하지만 다른 방법을 찾지 못했습니다.



3

대답이 도움이되지 않았습니다. 그러나 속임수-방금 밀어보기 전에 뒤로 버튼이 밀린 뷰 컨트롤러의 제목을 지 웠습니다.

따라서 이전보기에 제목이 없으면 iOS 7에서 뒤로 버튼에는 텍스트가없는 화살표 만 있습니다.

에 viewWillAppear밀어보기, 나는 원래의 제목을 다시 배치.


1
흠,이 트릭이 작동합니다. 그러나 때때로 거기에있는 단어가 깜박 거릴 것 같습니다. 아주 좋은 해결책은 아니지만 그럼에도 불구하고 좋은 해결책입니다. +1
— Pan Ziyue

3
    NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                [UIColor clearColor],UITextAttributeTextColor,
                                nil];

    [[UIBarButtonItem appearance] setTitleTextAttributes:attributes
                                                forState:UIControlStateNormal];

나는 같은 문제를 겪고 있었고 이렇게했다.

--편집하다--

이것은 모든 UIBarbuttonItem의 제목 텍스트를 정말로 제거하려는 경우의 해결책입니다. 뒤로 막대 단추 항목의 제목 만 제거하려는 경우 간단한 편리한 해결책이 없습니다. 필자의 경우 제목 텍스트를 표시 해야하는 UIBarButtonItems가 거의 없으므로 특정 버튼의 titleTextAttributes를 변경했습니다. 더 구체적으로하려면 아래 코드를 사용하십시오. 탐색 막대 버튼 만 변경됩니다.

NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                [UIColor clearColor],UITextAttributeTextColor,
                                nil];

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:attributes
                                                forState:UIControlStateNormal];

1
이것은 나를 위해 작동하지만 반격 할 때 텍스트를 간단히 볼 수 있습니다.
— Diziet

3
@Diziet는 State UIControlStateHighlighted도 동일하게 추가해보십시오
— CoderPug

2
이것은 잘 작동하지만 뒤로 버튼뿐만 아니라 다른 모든 버튼을 "숨 깁니다"...이 문제를 해결할 아이디어가 있습니까?
— Urkman

3

이것은 하위 클래스를 사용 navigationController하여 "뒤로"를 제거합니다.

앱을 통해 영구적으로 제거하는 데 사용하고 있습니다.

//.h
@interface OPCustomNavigationController : UINavigationController 

@end

//.m
@implementation OPCustomNavigationController

- (void)awakeFromNib
{
    [self backButtonUIOverride:YES];
}

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    [self backButtonUIOverride:NO];

    [super pushViewController:viewController animated:animated];
}

- (void)backButtonUIOverride:(BOOL)isRoot
{
    if (!self.viewControllers.count)
        return;

    UIViewController *viewController;

    if (isRoot)
    {
        viewController = self.viewControllers.firstObject;
    }
    else
    {
        int previousIndex = self.viewControllers.count - 1;

        viewController = [self.viewControllers objectAtIndex:previousIndex];
    }

    viewController.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@""
                                                                                       style:UIBarButtonItemStylePlain
                                                                                      target:nil
                                                                                      action:nil];
}

@end

3
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefaultPrompt];
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(10.0, NSIntegerMin) forBarMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor],
                                                               NSFontAttributeName:[UIFont systemFontOfSize:1]}
                                                    forState:UIControlStateNormal];

1
답변에 설명을 추가하십시오.
— Alex

1 탐색 막대와 같은 색을 만듭니다. 2 제목을 누르지 않을 정도로 텍스트 크기를 작게 만듭니다.
— Bill Xie

답변을 검토 한 결과 항상 답변을 지원해야합니다.
— Alex

2

뒤로 단추 숨기기 탐색 표시 줄 제목

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] init];
barButton.title = @""; // blank or any other title
self.navigationController.navigationBar.topItem.backBarButtonItem = barButton;

2

여기 내가하고있는 일이 있는데, 뒤로 버튼의 제목을 제거하는 것이 더 간단합니다.

override func viewDidLoad() {
    super.viewDidLoad()
    navigationController?.navigationBar?.backItem?.title = ""
}

2

Swift 3.1 UINavigationController의 delegate 메소드를 구현하여이를 수행 할 수 있습니다. 뒤로 버튼으로 제목 만 숨기고 뒤로 화살표 이미지와 기본 기능을 계속 사용할 수 있습니다.

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

1

이것을 사용할 수도 있습니다 :

UIBarButtonItem *temporaryBarButtonItem = [[UIBarButtonItem alloc] init];
temporaryBarButtonItem.title = @"";
self.navigationItem.backBarButtonItem = temporaryBarButtonItem;

[temporaryBarButtonItem release];

이것은 나를 위해 작동


1
case : <Back as <

override func viewWillAppear(animated: Bool) {
navigationController!.navigationBar.topItem!.title = ""
    }

1

전 세계적으로 완벽한 솔루션

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
}

모든 것의 덤프 솔루션 ... 그것도 이전처럼 공간을 사용 ... 그냥 투명 해 ...
— Laszlo

앱의 모든 UIBarButtonItems에서 텍스트를 제거합니다.
— Mikel Sanchez

1

나는 사용자 정의 클래스를 만들어 UINavigationController내 앱의 모든 탐색 컨트롤러에 적용합니다. 이 사용자 정의 UINavigationController클래스 내 에서 뷰가로드되면 UINavigationBar델리게이트를 설정했습니다 self.

- (void)viewDidLoad {
    self.navigationBar.delegate = self;
}

그런 다음 대리자 메서드를 구현합니다.

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPushItem:(UINavigationItem *)item {

    // This will clear the title of the previous view controller
    // so the back button is always just a back chevron without a title
    if (self.viewControllers.count > 1) {
        UIViewController *previousViewController = [self.viewControllers objectAtIndex:(self.viewControllers.count - 2)];
        previousViewController.title = @"";
    }
    return YES;
}

이렇게하면 모든 내비게이션 컨트롤러에 사용자 정의 클래스를 할당하고 모든 뒤로 버튼에서 제목을 지 웁니다. 그리고 명확성을 위해 항상 다른 모든보기 컨트롤러의 제목을 설정 viewWillAppear하여보기가 나타나기 직전에 제목이 항상 업데이트되도록합니다 (이와 같은 트릭으로 제거 된 경우).


1

뒤로 버튼 탐색 항목을위한 단일 공간을 입력하면됩니다 !!


1
이것은 답변보다 의견으로 더 적합합니다.
— Al Lelopath

1

나와 같은 사용자 정의보기를 사용 UINavigationBar하고 뒤로 버튼이 붙어 있으면 약간의 혼란을 느끼는 약간의 작업을 수행해야합니다.

[self.navigationController.navigationBar setHidden:NO];
self.navigationController.navigationBar.topItem.title = @"";
[self.navigationController.navigationBar setHidden:YES];

제목이 표시되지 않더라도 표시되지 않으면 제목이 표시되기 전에 표시되고 숨겨져 문제가 해결된다는 의미입니다.


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

1

나는 모든 뒤로 버튼 제목을 숨기도록 매우 간단한 제로 구성 카테고리를 만들었습니다 . 여기에서 확인할 수 있습니다 . 이 질문은 이미 답변을 받았지만 다른 사람들에게는 도움이 될 수 있습니다.

편집하다:

.h 파일

#import <UIKit/UIKit.h>

@interface UINavigationController (HideBackTitle)
extern void PJSwizzleMethod(Class cls, SEL originalSelector, SEL swizzledSelector);

@end

.m 파일

#import "UINavigationController+HideBackTitle.h"
#import <objc/runtime.h>


@implementation UINavigationController (HideBackTitle)

+ (void)load {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        PJSwizzleMethod([self class],
                    @selector(pushViewController:animated:),
                    @selector(pj_pushViewController:animated:));
    });
}

- (void)pj_pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
    UIViewController *disappearingViewController =  self.viewControllers.lastObject;
    if (disappearingViewController) {
        disappearingViewController.navigationItem.backBarButtonItem=[[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
    }
    if (!disappearingViewController) {
        return [self pj_pushViewController:viewController animated:animated];
    }
    return [self pj_pushViewController:viewController animated:animated];
}



@end

void PJSwizzleMethod(Class cls, SEL originalSelector, SEL swizzledSelector)
{
    Method originalMethod = class_getInstanceMethod(cls, originalSelector);
    Method swizzledMethod = class_getInstanceMethod(cls, swizzledSelector);

    BOOL didAddMethod =
    class_addMethod(cls,
                originalSelector,
                method_getImplementation(swizzledMethod),
                method_getTypeEncoding(swizzledMethod));

    if (didAddMethod) {
        class_replaceMethod(cls,
                        swizzledSelector,
                        method_getImplementation(originalMethod),
                        method_getTypeEncoding(originalMethod));
    } else {
        method_exchangeImplementations(originalMethod, swizzledMethod);
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.