it-swarm.com.ru

Удалить текст с кнопки "Назад", удерживая значок

Я хочу удалить текст с кнопки «Назад», но хочу сохранить значок. я пытался 

let backButton = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.Plain, target: navigationController, action: nil)
navigationItem.leftBarButtonItem = backButton

Однако это полностью удаляет текст и значок. 

53
lmiguelvargasf

Метод @ rmd2 почти верен, но вместо этого вы должны выбрать панель навигации контроллера, на которую будет указывать кнопка «Назад», и ввести " " в поле «Кнопка возврата».

 enter image description here

67
m8labs

Я знаю, что на это уже есть ответ, но вы также можете сделать это в коде (если вы работаете с перьями)

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

Добавьте вышеупомянутое в первом контроллере представления. 

Обратите внимание, что вам нужно сделать это для каждого контроллера представления, который выдвигает. Так что, если у вас есть 3 контроллера представления, и вы хотите удалить задний текст из всех них, вам нужно будет добавить строку в контроллеры представления 1 и 2. 

93
d9rad

Если вы хотите удалить заголовок кнопки «Назад» из контроллера push-представления, скажем, от <Settings до < в subSettingsViewController, то вам нужно установить заголовок backBarButtonItem в SettingsViewController viewWillDisappear () method.

Objective-C:

- (void)viewWillDisappear:(BOOL)animated
    [super viewWillDisappear:animated];
    self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:self.navigationItem.backBarButtonItem.style target:nil action:nil];
}

Swift:

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}
26
Muhammad Umair

Текст кнопки «Назад» зависит от заголовка основного вида.

Хитрость заключается в том, чтобы очистить заголовок, если основной вид исчезает, и установить его снова, если он отображается снова:

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(true)

    // needed to clear the text in the back navigation:
    self.navigationItem.title = " "
}

override func viewWillAppear(_ animated: Bool) {

    super.viewWillAppear(animated)
    self.navigationItem.title = "My Title"
}
21
Stefan

Если вы хотите стрелку назад, следуйте следующему коду, помещенному в файл AppDelegate в метод didFinishLaunchingWithOptions.

Для Свифта

let BarButtonItemAppearance = UIBarButtonItem.appearance()
BarButtonItemAppearance.setTitleTextAttributes([.foregroundColor: UIColor.clear], for: .normal)
19
Pradeep Bishnoi

В моем случае для пользовательского значка и заголовка это помогло (Swift 4)

    let imgBack = UIImage(named: "ic_back")

    navigationController?.navigationBar.backIndicatorImage = imgBack
    navigationController?.navigationBar.backIndicatorTransitionMaskImage = imgBack

    navigationItem.leftItemsSupplementBackButton = true
    navigationController?.navigationBar.topItem?.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: self, action: nil)
19
Rafiqul Hasan

Я решил эту проблему, добавив "" в заголовок StoryBoard предыдущего ViewController. Просто пространство, а не пустое; D

 enter image description here

13
rmd2

Наконец-то нашли идеальное решение.

Просто добавьте одно прозрачное изображение и добавьте следующий код в ваш AppDelegate.

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

Для Swift 4+ поместите эти строки в AppDelegate в didFinishLaunchingWithOptions

let BarButtonItemAppearance = UIBarButtonItem.appearance()

BarButtonItemAppearance.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .normal)      
BarButtonItemAppearance.setBackButtonTitlePositionAdjustment(UIOffsetMake(-200, 0), for:UIBarMetrics.default)
10
BilalReffas

После поиска я нашел лучшее и простое решение, это повлияет на все viewControllers написано в Swift 4.2

extension UIViewController {
            open override func awakeFromNib() {
                navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
        }  
}
9
iOS Lifee

в Свифт 4

self.navigationController?.navigationBar.topItem?.title = ""
7
Amalendu Kar

Если у вас есть ViewControllerA, и вы хотите перейти к ViewControllerB, в ViewControllerA вы должны установить текущий navigationItem с новым UIBarButtonItem и заголовок в строку с пустым пространством перед Push в другой контроллер представления:

Установить заголовок для строки с пробелом, вы не можете установить nil или "" (пустая строка), потому что значением по умолчанию является nil

let backItem = UIBarButtonItem()
backItem.title = " "
navigationItem.backBarButtonItem = backItem
let controllerB = ViewControllerB()
navigationController?.pushViewController(controllerB, animated: true)
4
Bradley
let button: UIButton = UIButton (type: UIButtonType.Custom)
button.setImage(UIImage(named: "imageName"), forState: UIControlState.Normal)
button.addTarget(self, action: "backButtonPressed:", forControlEvents: UIControlEvents.TouchUpInside)
button.frame = CGRectMake(0, 0, 30, 30)
let barButton = UIBarButtonItem(customView: button)

self.navigationItem.leftBarButtonItem = barButton

func backButtonPressed(btn : UIButton) {

    // Your code
}
3
Hasya

Чтобы удалить из всех контроллеров представления в стеке контроллера навигации:

подкласс UINavigationController и добавить это:

override func show(_ vc: UIViewController, sender: Any?) {
    setEmptyBackButton(vc)
    super.show(vc, sender: sender)
}

override func pushViewController(_ viewController: UIViewController, animated: Bool) {
    setEmptyBackButton(viewController)
    super.pushViewController(viewController, animated: animated)
}

func setEmptyBackButton(_ viewController: UIViewController) {
    viewController.navigationItem.backBarButtonItem =
        UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}
2
Gaston Gonzalez

Поместите этот код в каждый VC, который выдвигает другой

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

Иногда не работает изменение только цвета заголовка, если заголовок длинный. Потому что это может сместить заголовок панели навигации влево. Поэтому, чтобы предотвратить это, вам может понадобиться сместить заголовок кнопки панели по горизонтали, чтобы сделать ее прозрачной:

let barButtonItemAppearance = UIBarButtonItem.appearance()
    barButtonItemAppearance.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .normal)
    barButtonItemAppearance.setBackButtonTitlePositionAdjustment(UIOffsetMake(-200, 0), for:UIBarMetrics.default)
2
Max Niagolov

Xcode 10, Swift 4+

Подобный ответ остальным здесь, но стоит отметить, что если текст все еще не очищен, вы должны нажать Пробел, а затем Enter.

 enter image description here

1
Aishat Olowoshile

Для меня это сработало:

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(true)
    self.navigationItem.title = " "
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationItem.title = "my amazing title"
    navigationItem.backBarButtonItem = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
}

Обратите внимание, что если вы только установите заголовок без изменения backBarButtonItem, то он будетпоявитсядля работы. Но если вы попытаетесь вернуться назад, используя жест, а затем отменить и остаться на контроллере push-представления, обратный заголовок вернется.

Работа в Swift 4

1
mrc

Вы должны выбрать панель навигации контроллера, на которую будет указывать кнопка «Назад», и ввести «» в поле «Кнопка возврата».

например, если вы помещаете контроллер A в контроллер B, вставьте пробел в навигационную панель контроллера.

1
Tushar Raikwar

Это решит вашу проблему:

    import UIKit

    extension UINavigationController{

    func customizeBackArrow(){
        let yourBackImage = UIImage(named: "icon_back_arrow")
        self.navigationBar.backIndicatorImage = yourBackImage
        self.navigationBar.tintColor = Common.offBlackColor
        self.navigationBar.backIndicatorTransitionMaskImage = yourBackImage
        navigationItem.leftItemsSupplementBackButton = true
        self.navigationBar.topItem?.backBarButtonItem = UIBarButtonItem(title: "", 
           style: .plain, target: self, action: nil)

    }
}
0
mossman252

Я попробовал пару ответов, и я не могу заставить их работать во всех случаях. Так что это обходной путь, который не влияет на заголовок панели навигации, если он установлен.

    guard let items = viewController.navigationController?.navigationBar.items else { return }
    for item in items {
        if item.title == nil {
            item.title = ""
        }
    }
0
Rikard Platus

Для случая, когда мы не имеем никакого контроля над предыдущим контроллером представления (то есть, если мы работаем в платформе), мы можем удалить заголовок кнопки «Назад» следующим образом:

// For iOS 10
navigationController?.navigationBar.items?.last?.backBarButtonItem?.title = String()

// For iOS 11
navigationController?.navigationBar.items?.last?.backBarButtonItem?.title = nil

Он выполняет переход к последнему элементу стека навигации и удаляет его задний заголовок. Обязательно сохраните исходный, когда появится наш контроллер вида:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    originalBackButtonTitle = navigationController?.navigationBar.items?.last?.backBarButtonItem?.title
    // Delete title somewhere here...
}

а затем переназначить его, чтобы не нарушать работу какой-либо части приложения:

override func viewWillDisappear(_ animated: Bool) {
    navigationController?.navigationBar.items?.last?.backBarButtonItem?.title = originalBackButtonTitle
    super.viewWillDisappear(animated)
}
0
Ángel Téllez

В Xcode 9.2 со Swift это работало так:

override func viewWillDisappear(_ animated: Bool) {
   super.viewWillDisappear(true)
   navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}
0
Thiago Bueno

Я использовал этот код в функции didFinishLaunchingWithOptions в Appdelegate.

if #available(iOS 11, *) {
            UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .normal)
            UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .highlighted)
        } else {
            UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0,
                                                                                           -60), for:UIBarMetrics.default)
        }
0
Varun Naharia