UINavigationBar Ẩn văn bản nút quay lại


103

Làm cách nào để ẩn Văn bản Nút Quay lại khỏi Bộ điều khiển UINavigation? Tôi sẽ chỉ có "<" chứ không phải "<Quay lại"


1
bạn không thể sửa đổi văn bản mặc định, thay vào đó hãy thử navigationItem.leftBarButtonItem để đặt nút quay lại tùy chỉnh
BaSha


Xem câu trả lời của tôi bên dưới, nếu bạn muốn một giải pháp toàn cầu sử dụng proxy giao diện.
fl034

Câu trả lời:


106

Trong trình tạo giao diện , bạn có thể chọn mục điều hướng của bộ điều khiển trước đó và thay đổi Back Buttonchuỗi thành những gì bạn muốn nút quay lại xuất hiện. Ví dụ, nếu bạn muốn nó trống, chỉ cần đặt một khoảng trắng.

Bạn cũng có thể thay đổi nó bằng dòng mã này:

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

Hoặc trong Swift :

self.navigationItem.backBarButtonItem?.title = ""


2
Tuyệt vời mũi, là về thiết lập một không gian trống trên giao diện người xây dựng ... :-D
Felipe Ferri

9
Xây dựng giao diện và Swift tuyến theo chương trình đã không làm việc cho tôi trong XCode 8.3.2, Swift 3
Agrippa

Bạn có thể xem giải pháp rất đơn giản của tôi để ẩn tất cả các nút quay lại thông qua ứng dụng. PS: Yêu cầu zero dòng mã của riêng bạn
Pratik Jamariya

2
Nếu Back Buttonđã trống trong IB, chỉ cần thêm khoảng trống để bắt đầu Backvà chỉ cần hiển thị mũi tên.
Tejas K

3
Phương pháp này hiện chỉ hoạt động trong trình tạo giao diện. Đặt điều này từ mã không hoạt động, thay vì chỉ đặt tiêu đề, bạn cần đặt toàn bộ backBarButtonItem như sau: navigationItem.backBarButtonItem = UIBarButtonItem (title: "", style: .plain, target: nil, action: nil)
Leszek Szary

81

Bạn cũng có thể làm điều này thông qua bảng phân cảnh. Trong trình kiểm tra thuộc tính của mục điều hướng của bộ điều khiển trước đó bạn có thể đặt "" trong trường nút Quay lại. Tham khảo Hình ảnh bên dưới. Thay thế "Tiêu đề của bạn ở đây" thành "". Bằng cách này, bạn sẽ đạt được kết quả mong muốn. Bạn không cần phải lộn xộn với 'Tiêu đề' nữa.

Lập trình bạn có thể sử dụng

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

trong đó self đề cập đến bộ điều khiển đẩy bộ điều khiển Chế độ xem mong muốn của bạn.

Mục điều hướng bộ điều khiển chế độ xem Xcode

Mẫu trước, sau thanh điều hướng

Trước Trước

Sau Sau


7
Điều này hoạt động hoàn hảo nếu nó được đặt trong bảng phân cảnh. Chỉ cần đảm bảo rằng thanh điều hướng có một mục điều hướng trong đó để nó có thể được đặt.

11
Trong iOS 9 / Xcode 7.3, cài đặt theo backBarButtonItemchương trình không hoạt động, nhưng cài đặt qua bảng phân cảnh thì có.
Scott Gardner

@ScottGardner, thiết backBarButtonItemlập lập trình hoạt động đối với tôi trong iOS 9.
Suragch

Nếu bạn không có thanh điều hướng trong màn hình, có thể do nó cần được ẩn đi, bạn có thể thêm mục điều hướng trong bảng phân cảnh, vào bộ điều khiển chế độ xem trước và đặt nút quay lại của nó thành "".
Martin Berger

Giải pháp làm việc rất lớn và rất dễ dàng để thực hiện trong Xcode 9.2 / iOS 11.
Ray Hunter

77

Bạn có thể triển khai UINavigationControllerDelegatenhư thế này:

Swift cũ hơn

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

Swift 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
    }
}

backBarButtonItemniltheo mặc định và nó ảnh hưởng đến bộ điều khiển được đẩy tiếp theo, vì vậy bạn chỉ cần đặt nó cho tất cả bộ điều khiển


6
Cảm ơn bạn! Đây là giải pháp duy nhất hoạt động (mà không làm xáo trộn bất kỳ điều gì khác) sau khi xem xét 4 câu hỏi trùng lặp và hàng chục câu trả lời.
inket

1
Tôi đã có một lớp con bộ điều khiển điều hướng mà tôi đã tạo thành đại biểu của riêng nó, điều này hoạt động hoàn hảo. Nên cập nhật cho Swift 3.
Dean Kelly

Cảm ơn giải pháp tuyệt vời, giải pháp duy nhất hoạt động ổn định cho tôi.
Elliott Davies

Woks như một cái duyên.
tounaobun

46

Đặt tiêu đề của nút quay lại thành @""hoặc nilkhông hoạt động. Bạn cần đặt toàn bộ nút trống (không có tiêu đề hoặc hình ảnh):

Objective-C

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

Nhanh

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

Điều này sẽ được thực hiện trên bộ điều khiển chế độ xem nằm trên bộ điều khiển chế độ xem của bạn trong ngăn xếp điều hướng (tức là từ nơi bạn điều hướng đến VC của mình qua pushViewController phương thức)


2
cảm ơn bạn, nó hoạt động! Trong nhanh chóng: self.navigationItem.backBarButtonItem = UIBarButtonItem (tiêu đề: "", style: .Plain, target: nil, action: nil)
mostworld77

30

Một giải pháp khác cho vấn đề này đối với các tình huống mà bạn có nhiều bộ điều khiển chế độ xem là sử dụng UIAppearanceproxy để ẩn hiệu quả văn bản tiêu đề nút quay lại như sau:

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

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

Giải pháp này sẽ hiển thị văn bản dưới dạng một chấm rõ ràng nhỏ, tương tự như đặt tiêu đề nút quay lại theo cách thủ công @" ", ngoại trừ việc nó ảnh hưởng đến tất cả các nút trên thanh điều hướng.

Tôi không đề xuất đây là giải pháp chung cho vấn đề vì nó ảnh hưởng đến tất cả các nút trên thanh điều hướng. Nó lật ngược mô hình để bạn chọn thời điểm hiển thị tiêu đề nút, thay vì khi nào ẩn tiêu đề.

Để chọn thời điểm hiển thị tiêu đề, hãy khôi phục theo cách thủ công các thuộc tính văn bản tiêu đề nếu cần hoặc tạo một lớp con chuyên biệt của lớp UIBarButtonItemnày tương tự (có thể với một UIAppearanceproxy khác ).

Nếu bạn có một ứng dụng cần ẩn hầu hết các tiêu đề nút quay lại và chỉ một vài (hoặc không có) nút điều hướng là nút hệ thống có tiêu đề, thì điều này có thể dành cho bạn!

(Lưu ý: cần thay đổi kích thước phông chữ mặc dù màu văn bản rõ ràng để đảm bảo rằng các tiêu đề dài không làm cho tiêu đề của thanh điều hướng chính giữa bị dịch chuyển qua)


Là giải pháp dễ dàng nhất cho việc triển khai của tôi. Cảm ơn.
Trevor Panhorst

3
Điều này không phải cũng che đậy các mục nút thanh bên trái không phải là nút quay lại?
kevinl

1
Vâng, tôi đã ghi nhận rất nhiều. "nó ảnh hưởng đến tất cả các nút thanh nav"
Adam Kaplan

2
nó sẽ không ảnh hưởng đến tất cả các nút khác trong thanh điều hướng bao gồm các mục nút thanh trái / phải?
Fyodor Volchyok,

Vâng, anh ấy không chỉ định một yêu cầu toàn diện hơn.
Adam Kaplan

30

Thêm mã sau vào viewDidLoad hoặc loadView

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

Tôi đã thử nghiệm nó trên iPhone và iPad với iOS 9


20
Điều này không rõ ràng tiêu đề của bộ điều khiển chế độ xem trước đó?
CalZone

6
Không sử dụng vì nó sẽ xóa tiêu đề màn hình cuối cùng
evya

Nếu bạn cần làm điều đó từ bộ điều khiển chế độ xem hiện tại thì để tránh xóa tiêu đề khỏi vc trước đó, bạn nên thực hiện: navigationController? .NavigationBar.topItem? .BackBarButtonItem = UIBarButtonItem (title: "", style: .plain, target: nil, hành động: nil)
Leszek Szary

15

Bạn có thể thêm danh mục Objective-C này để làm cho tất cả các nút "Quay lại" được tạo bởi bộ điều khiển điều hướng không có văn bản. Tôi vừa thêm nó vào tệp AppDelegate.m của mình.

@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

Tái bút - (Tôi không biết làm thế nào để tiện ích mở rộng này hoạt động với Swift, nó gặp lỗi kỳ lạ. Các chỉnh sửa hoan nghênh bạn thêm phiên bản Swift)


Đây cho danh hiệu "Back" không giấu danh hiệu
Raj Aggrawal

Thực sự, làm thế nào để overridenó nhanh chóng. Rất thú vị câu hỏi
Andrey Gagan

@teradyl đó là câu trả lời tốt nhất.
aks.knit1108

@Andrey Gagan, xem câu trả lời của tôi
Abirami Bala

Điều này hoạt động trên iOS 9.0 - 10.3.3, nhưng trên iOS 11+ không hoạt động.
Sihad Begovic

13

Tôi đã thử một số bên trên và bên dưới nhưng chúng không hoạt động. Điều này đã làm việc cho tôi:

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

1
Nếu bạn cần làm điều đó từ bộ điều khiển chế độ xem hiện tại thì để tránh xóa tiêu đề khỏi vc trước đó, bạn nên thực hiện: navigationController? .NavigationBar.topItem? .BackBarButtonItem = UIBarButtonItem (title: "", style: .plain, target: nil, action: nil)
Leszek Szary

11

Điều duy nhất hoạt động mà không có tác dụng phụ là tạo một nút quay lại tùy chỉnh. Miễn là bạn không cung cấp một hành động tùy chỉnh, ngay cả cử chỉ trượt cũng hoạt động.

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

Thật không may, nếu bạn muốn tất cả các nút quay lại trong không có bất kỳ tiêu đề nào, bạn cần thiết lập nút quay lại tùy chỉnh này trong tất cả các bộ điều khiển chế độ xem của mình: /

override func viewDidLoad() {
    super.viewDidLoad()

    setupBackButton()
}

Điều rất quan trọng là bạn phải đặt khoảng trắng làm tiêu đề chứ không phải chuỗi trống.


9

để xóa Văn bản khỏi nút ngược theo chương trình, được sử dụng bên dưới Mã này sẽ hoạt động ở dạng xcode7 trở lên.

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

hoặc là

manualLy trong bảng phân cảnh, chọn thanh điều hướng trên bộ điều khiển chế độ xem và đặt "" vào văn bản nút quay lại.

điều này sẽ hoạt động. cảm ơn


2
Cái này cũng sẽ xóa tiêu đề mục
Ilker Baltaci

Tôi đã chỉnh sửa câu trả lời của bạn cho điều này: self.navigationController?.navigationBar.topItem?.title = " "trong Xcode 9 và đã hoạt động!
MHSFisher

Nếu bạn cần làm điều đó từ bộ điều khiển chế độ xem hiện tại thì để tránh xóa tiêu đề khỏi vc trước đó, bạn nên thực hiện: navigationController? .NavigationBar.topItem? .BackBarButtonItem = UIBarButtonItem (title: "", style: .plain, target: nil, hành động: nil)
Leszek Szary

8

Câu trả lời hiện tại không hoạt động. Tôi đã muốn xóa hoàn toàn tiêu đề , nhưng dòng chữ "back" không biến mất.

Quay lại bộ điều khiển chế độ xem trước đó và đặt thuộc tính tiêu đề của nó:

self.title = @" ";

CHỈ hoạt động khi Bộ điều khiển Chế độ xem trước đó không có tiêu đề


@ZevEisenberg đảm bảo thuộc tính đang được đặt trước khi hiển thị trong vòng đời của View Controller. Có nghĩa là đặt nó trong phương thức viewDidLoad hoặc viewWillAppear.
ChrisHaze

1
ngoài ra, hãy đảm bảo bao gồm một khoảng trắng giữa các dấu ngoặc kép.
ChrisHaze

1
Nó thực sự đã làm việc cho tôi mà không có dấu cách; chỉ tốt cũ chuỗi rỗng: @"".
Zev Eisenberg

1
@ZevEisenberg, Khi tôi lần đầu tiên đưa ra giải pháp, đó là giải pháp trước đó trong Xcode 5. Với khoảng trắng là cách duy nhất nó hoạt động, đó là lý do tại sao tôi đưa nó vào mã mẫu. Bản cập nhật Xcode 6 phải bao gồm nó. Điều cần biết - thx
ChrisHaze

Tôi cũng đã sử dụng cách tiếp cận của mình, phương pháp này vẫn đang hoạt động và thực sự cũng đã loại bỏ mũi tên quay lại tiêu chuẩn.
ChrisHaze

5

Cách khác - sử dụng lớp NavigationBar tùy chỉnh.

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()
    }

}

Đó là, điều này loại bỏ các tiêu đề trở lại toàn bộ dự án. Chỉ cần đặt lớp tùy chỉnh cho UINavigationController.


4

Đặt Tiêu đề của VC trước thành chuỗi "" có dấu cách. và tiêu đề có nút quay lại sẽ được thay thế bằng chuỗi dấu cách duy nhất.

Self.title = " "

Khi Quay lại, nhấn lại đặt lại tiêu đề về tiêu đề ban đầu trong viewWillAppear.


4

Sử dụng một tùy chỉnh NavigationControllerghi đè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

Đã có rất nhiều câu trả lời, đây là hai xu của tôi về chủ đề này. Tôi thấy cách tiếp cận này thực sự mạnh mẽ. Bạn chỉ cần đưa cái này vào viewController trước khi chuyển.

Swift 4:

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

2
Đúng! Cảm ơn bạn :)
Hews

3

Tôi đã thử mọi thứ trong bài đăng này. Giải pháp hoạt động duy nhất là @ VoidLess's

Đây là câu trả lời tương tự nhưng đầy đủ hơn

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

Đây là giải pháp của tôi cho iOS11, tôi thay đổi giao diện của UIBarButtonItem trong applicationDidFinishLaunchingWithOptions:

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

Bạn không thể thay đổi độ lệch Y vì nó cũng sẽ thay đổi vị trí của nút thanh quay lại trong iOS11, nhưng hoàn toàn ổn trong iOS10 trở xuống.


1
Nó hoạt động nhưng trong quá trình hoạt ảnh, bạn có thể thấy tiêu đề trước đó di chuyển sang trái. Nó trông có một chút lỗi.
Jonathan

2

Trong Swift3,

Nếu bạn đặt cài đặt chung

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
Lưu ý rằng điều này cũng sẽ thay đổi màu thành trong suốt cho tất cả các nút thanh khác mà bạn có thể có ở đâu đó trong ứng dụng của mình, không chỉ các nút quay lại.
Leszek Szary

2

Swift 3.1 Bạn có thể thực hiện việc này bằng cách triển khai phương thức ủy nhiệm của UINavigationController.

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
}

Câu trả lời tốt nhất!
evya

2

Đối với những người muốn ẩn tiêu đề nút quay lại trên toàn cầu.

Bạn có thể sự gian lận viewDidLoadcủa UIViewControllernhư thế này.

+ (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);
    }

}

Sử dụng:

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

1

Tôi đã đấu tranh với điều này vì tôi có một bộ điều khiển điều hướng tùy chỉnh. Tôi đã có thể xóa văn bản mục quay lại trong tất cả các bộ điều khiển chế độ xem bằng mã này trong lớp bộ điều khiển điều hướng tùy chỉnh của mình override func viewDidLayoutSubviews() { self.navigationBar.backItem?.title = "" }

Thao tác này sẽ xóa tất cả các tiêu đề mục quay lại bằng cách sử dụng bộ điều khiển điều hướng tùy chỉnh này.


1
Cập nhật cho cái này: cái này hoạt động nhưng có một độ trễ kỳ lạ khi tải làm phiền tôi. Bây giờ tôi đã thêm điều này 'let BarButtonItemAppearance = UIBarButtonItem.appearance () BarButtonItemAppearance.setTitleTextAttributes ([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .normal)' trong App ủy nhiệm didLaunchWithOptions, và nó đang hoạt động hoàn hảo!
Amy.R

1

Nếu bạn đang nhắm mục tiêu iOS 13 trở lên, bạn có thể sử dụng API mới này để ẩn tiêu đề nút quay lại trên toàn cầu .

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
Điều này không phải là tối ưu. Nếu người dùng chạm vào nhãn có văn bản rõ ràng, hành động quay lại vẫn được kích hoạt.
dvdblk

0

Trong iOS 11, chúng tôi nhận thấy rằng việc đặt UIBarButtonItemphông chữ / màu văn bản của giao diện thành giá trị rất nhỏ hoặc màu rõ ràng sẽ dẫn đến mục thanh khác biến mất (hệ thống không tôn trọng loại mục UIBarButton nữa, nó sẽ chuyển đổi nó thành_UIModernBarButton ). Ngoài ra, thiết lập độ lệch của văn bản trở lại màn hình sẽ dẫn đến nhấp nháy trong cửa sổ bật tương tác.

Vì vậy, chúng tôi xoay xở 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

Văn bản phía sau đến từ navigationItem.title,của Bộ điều khiển Chế độ xem cuối cùng và navigationItem.titleđược đặt tự động bởi self.title. Vì vậy, cách dễ dàng để giải quyết vấn đề là mócsetTitle:, hãy đảm bảonavigationItem.title = @""

Đặt mã này theo AppDelegate.mý mình sẽ ổn thôi。

    [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];

Thông tin chi tiết tại https://www.jianshu.com/p/071bc50f1475(Chinease đơn giản)


0

Giải pháp của tôi: - XCode: 10.2.1 - Swift: 5

  • Bộ điều khiển chế độ xem chính:
    • self.title = ""
  • Bộ điều khiển chế độ xem con:
    • self.navigationItem.title = "Your title" // để đặt tiêu đề cho viewcontroller

0

XCode 11.5 Swift 5

Một cách rất đơn giản - mặc dù có lẽ hơi khó hiểu - theo cách lập trình này nếu bạn không cần nút quay lại tùy chỉnh là đặt kích thước phông chữ bằng 0 trong bộ điều khiển chế độ xem mà bạn đang đẩy lên ngăn xếp, gọi một cái gì đó như thế này từ 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

Cuối cùng đã tìm thấy giải pháp hoàn hảo để ẩn văn bản trở lại mặc định trong toàn bộ ứng dụng.

Chỉ cần thêm một Hình ảnh trong suốt và thêm mã sau vào AppDelegate của bạn.

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

-2

Phương pháp sau hoạt động trên iOS 11 và an toàn để không gặp sự cố trên các phiên bản iOS khác. Làm điều này có thể khiến ứng dụng của bạn bị từ chối trong bài đánh giá của App Store vì cả UIModernBarButton và UIBackButtonContainerView đều là các API riêng tư. Đặt trong 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)
    }

Làm điều này có thể khiến ứng dụng của bạn bị từ chối trong bài đánh giá của App Store vì cả UIModernBarButton và UIBackButtonContainerView đều là các API riêng tư.
Groot

Cảm ơn @Groot, đã thêm cảnh báo của bạn.
Patrick

-5

Phiên bản Swift, hoạt động hoàn hảo trên toàn cầu:

 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
Bạn nên thêm, rằng điều này sẽ ẩn tất cả văn bản cũng như rightBarButtons và leftBarButtons, những văn bản này sẽ không quay trở lại.
limfinity

đây không phải là một solution. Như @limfinity chỉ, nó sẽ thay đổi nó phổ biến cho tất cả của các UIBarButtonItem suốt ứng dụng
Dănuţ Pralea

tôi đồng ý với @limfinity và Danut Pralea, nó sẽ ẩn tất cả văn bản của UIBarButtonItem trong toàn bộ ứng dụng
Pratik Jamariya
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.