Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

Если вы хотите стрелку назад, AppDelegate следующему коду, помещенному в файл didFinishLaunchingWithOptions метод 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)

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

Удачного кодирования.

Ответ 2

Работайте как шарм на Swift 3

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

Ответ 3

Я использую эту строку коды в AppDelegate файла в didFinishLaunchingWithOptions метод для удаления BackButton 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)

Ответ 4

Просто перейдите в свой Parent ViewController, где ваши другие ViewControllers зависят.

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

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

enter image description here

Ответ 8

Вы можете создать подкласс для всех UIViewController, для которого требуется это поведение, и в подклассе viewDidLoad:

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

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

Ответ 9

Взяв вдохновение из здесь, я создал пользовательскую панель UINavigationController и UINavigation, которая кажется для обработки всех случаев этой сложной проблемы.

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

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

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

Ответ 10

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

Swift 5

UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffset(horizontal: -1000.0, vertical: 0.0), for: .default)

Swift 4

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

Ответ 11

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

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

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

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

Еще проще, просто измените заголовок:

self.navigationItem.leftBarButtonItem.title = "Back"

Ответ 12

Swift 3:

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

Ответ 13

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

Итак, во-первых, создайте класс расширения 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 каждого контроллера представления, в котором она вам нужна.

Ответ 14

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

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

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

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

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

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

Ответ 15

Swift 4.2

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

Ответ 16

Обновленный ответ для Swift 4.2

Работа с UIAppearance является более чистым способом решения проблемы, но при этом все UIBarButtonItem должны иметь четкий текст. Усовершенствованной версией решения может быть проверка того, содержится ли UIBarButtonItem в UINavigationBar.

    UIBarButtonItem.appearance(whenContainedInInstancesOf: [UINavigationBar.self]).setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.clear], for: .normal)

Ответ 17

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

leftBarButtonItem.title = ""

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

Ответ 18

Просто используйте это:

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

Ответ 19

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

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

Ответ 20

Я хотел бы поделиться решением, которое работает для меня. Кроме того, это может быть скорректировано на основе ваших потребностей и требований.

Обратите внимание, в моем случае я использую раскадровку, чтобы указать CustomNavigationBar

Swift 4.2

class CustomNavigationBar: UINavigationBar {

    override func awakeFromNib() {
        super.awakeFromNib()
        guard let topItem = topItem else { return }
        removeBackButtonTitle(for: topItem)
    }

    override func pushItem(_ item: UINavigationItem, animated: Bool) {
        removeBackButtonTitle(for: item)
        super.pushItem(item, animated: animated)
    }

    func removeBackButtonTitle(for item: UINavigationItem) {
        item.backBarButtonItem = UIBarButtonItem()
    }
}

Ответ 21

Работает на Swift 4.2

Использование строки кода в AppDelegate файла в didFinishLaunchingWithOptions

    UIBarButtonItem.appearance(whenContainedInInstancesOf: [UINavigationBar.self]).setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.clear], for: .normal)

    UIBarButtonItem.appearance(whenContainedInInstancesOf: [UINavigationBar.self]).setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.clear], for: .highlighted)

Ответ 22

Swift 4.2 & 5

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

Используйте код ниже:

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

Позвоните с вашего первого ViewController:

self.awakeFromNib()

Ответ 23

для быстрых 4,5

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

Ответ 24

Просто создайте расширение UIViewController с помощью функции переопределения awakeFromNib(), сделайте UIBarButtonItem с пустым заголовком и присвойте navigation backBarButtonItem.

extension UIViewController {

  open override func awakeFromNib() {
    let backBarBtnItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
    navigationItem.backBarButtonItem = backBarBtnItem
  }

}

Ответ 25

Поместите приведенный ниже код в любой из UIViewcontroller extension, в котором будет скрыт весь текст UIViewcontroller

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

Ответ 26

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

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

Вам нужно будет вызвать их из AppDelegate в функции didFinishLaunchingWithOptions.

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