Как удалить все Название кнопки навигации назад



когда я нажимаю a UIViewController, Он имеет некоторое название в кнопку назад на новый UIViewController, Если заголовок имеет много текста, он не выглядит хорошо в iPhone 4s, поэтому я хочу удалить его.



Если я добавлю код в prepareForSegue функция, это будет проблема.



любой лучший способ достичь этого?

654   18  

18 ответов:

если вы хотите, чтобы стрелка назад так следующий код положить в на didFinishLaunchingWithOptions метод.

For Objective-C

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

For Swift

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

другой вариант дам ниже.

на Objective C

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

на Swift

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

обновление :

    let BarButtonItemAppearance = UIBarButtonItem.appearance()

    let attributes: [NSAttributedStringKey: Any] = [
    BarButtonItemAppearance.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .normal)
            NSAttributedStringKey.font: UIFont.systemFont(ofSize: 0.1),
            NSAttributedStringKey.foregroundColor: UIColor.clear]

    BarButtonItemAppearance.setTitleTextAttributes(attributes, for: .normal)
    BarButtonItemAppearance.setTitleTextAttributes(attributes, for: .highlighted)

ОБНОВЛЕНИЕ SWIFT 4.1:

    let attributes = [NSAttributedStringKey.font:  UIFont(name: "Helvetica-Bold", size: 0.1)!, NSAttributedStringKey.foregroundColor: UIColor.clear]

    BarButtonItemAppearance.setTitleTextAttributes(attributes, for: .normal)
    BarButtonItemAppearance.setTitleTextAttributes(attributes, for: .highlighted)

используя Смещение

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

так может быть ваша проблема была решена.

удачи в кодировании.

Я использую эту строку кода в на didFinishLaunchingWithOptions метод удаления задней кнопки title.

Swift 2.x

let barAppearace = UIBarButtonItem.appearance()
barAppearace.setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -60), forBarMetrics:UIBarMetrics.Default)

Swift 3.x

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

Swift 4.x

UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .normal)
    UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: UIControlState.highlighted)

работа как шарм на Swift 3

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

вы можете использовать xcode 8 и swift 3.0

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

просто нужно перейти к вашему Родительский ViewController от того, где ваши другие ViewControllers зависят.

override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(true)
navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .Plain, target: nil, action: nil)}
let barAppearace = UIBarButtonItem.appearance()
barAppearace.setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -60), for:UIBarMetrics.default)

использовал эту строку кода в swift 3.0

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

1) инициализировать новый UINavigationController С вашим заказом UINavigationBar:

class CustomNavigationController: UINavigationController {

    convenience init() {
        self.init(navigationBarClass: CustomNavigationBar.self, toolbarClass: nil)
    }
}

2) установить backItem.title свойство панели навигации в пустую строку, каждый раз, когда представление выкладывает себя

class CustomNavigationBar: UINavigationBar {

    override func layoutSubviews() {
        backItem?.title = ""
        super.layoutSubviews()
    }
}

теперь каждый раз, когда вы используете эту навигацию контроллер и комбинация баров, он никогда не будет иметь текст кнопки Назад!

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

Я обычно добавляю или изменяю кнопку Назад в viewDidLoad UIViewController.

что-то вроде этого должно работать:

let leftButton = UIBarButtonItem(title: "Back", style:     UIBarButtonItemStyle.Plain, target: self, action: "closeView:")
self.navigationItem.leftBarButtonItem = leftButton

Не забудьте изменить и реализовать функцию, которая вызывается для закрытия представления.

еще проще, просто изменить название:

self.navigationItem.leftBarButtonItem.title = "Back"

Это просто. поставьте пробел в заголовке кнопки назад и готово. Помните, что он должен быть в предыдущем представлении, где вы хотите удалить текст.

enter image description here

вы можете создать подкласс для всех UIViewControllers вы хотите, чтобы это поведение, и в подкласса viewDidLoad:

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.backBarButtonItem = UIBarButtonItem(
        title: "", style: .plain, target: nil, action: nil)
}

таким образом, вы можете выбрать, какие контроллеры вы хотите, чтобы поведение, не дублируя код. Я предпочитаю, чтобы мои контроллеры просто говорили "назад", а не название предыдущего контроллера, поэтому я установил этот заголовок здесь.

Swift 3:

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

добавление второго ответа здесь, как мой первый только частично работает. Этот метод менее элегантен в том, что он требует вызова метода в каждом представлении в приложении, однако он работает без каких-либо побочных эффектов.

Итак, во-первых, создайте класс расширения UIViewController с функцией удаления текста кнопки "назад" и добавьте пользовательскую кнопку "Назад":

extension UIViewController {

func setBackButton() {
    navigationController?.navigationBar.backIndicatorImage = R.image.backArrow()
    navigationController?.navigationBar.backIndicatorTransitionMaskImage = R.image.backArrow()
    navigationItem.backBarButtonItem = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
}

во-вторых, мы можем просто вызвать эту функцию в viewDidLoad каждого контроллера вида вам это нужно в.

Я не знаю, почему, но я нашел проблему со скрытием названия кнопки Назад в iPhone плюсы, но в устройстве без плюса показывает правильно с

leftBarButtonItem.title = ""

Так что я нашел простой способ. Он установлен оттенок цвета, чтобы очистить в NavigationBar NavigationViewController в autolayout. Это может быть проблемой, если вы используете значки или текстовые плитки с оттенком. Но в моем случае я не использую его как все.

просто использовать это:

func removeBackButton(vc:UIViewController) {
        let button = UIButton.init(type: .custom)
        button.setImage(UIImage.init(named:""), for: .normal)
        let leftBarButton = UIBarButtonItem.init(customView: button)
        vc.navigationItem.leftBarButtonItem = leftBarButton
}

поэтому вызовите этот метод в viewDidLoad:

override func viewDidLoad() {
        super.viewDidLoad()
     removeBackButton(vc:self)
}

вы можете добавить это расширение в UIViewController А затем вызвать эту функцию в каждом viewDidLoad() например: self.updateBackButton ()

extension UIViewController {
func updateBackButton(){
    if self.navigationController != nil {
        self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .done, target: self, action: nil)
    }
}}

Swift 4

просто скопируйте этот код в didFinishLaunchingWithOptions launchOptions

UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(-1000.0, 0.0), for: .default)

Простое Решение :

пока вы нажимаете 2-й контроллер с 1-го контроллера, положите self.navigationItem.title ="" на viewWillDisappear 1-й контроллер. Он скрывает название кнопки назад от 2-го контроллера.

выше statment скрывает название 1-го контроллера, поэтому, когда мы вернулись, мы снова хотим название для 1-го контроллера. Для этого у нас есть добавить заголовок для 1-го контроллера в viewWillAppear метод 1-го контроллера.

см. следующие методы (1-го контроллера)

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

override func viewWillAppear(_ animated: Bool) {
    self.navigationItem.title = "Title"
}

Я не был доволен setBackButtonTitlePositionAdjustment решение, так что вот быстрая альтернатива, чтобы скрыть все тексты кнопки назад по всему applicataion:

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

вы должны были бы вызвать их из AppDelegate на didFinishLaunchingWithOptions func.

внешний вид должен быть установлен на .Highlighted состояние тоже, чтобы избежать текстов, которые показывают, когда пользователь нажимает кнопку "Назад".

Comments

    Ничего не найдено.