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.