Как удалить все Название кнопки навигации назад
когда я нажимаю a UIViewController, Он имеет некоторое название в кнопку назад на новый UIViewController, Если заголовок имеет много текста, он не выглядит хорошо в iPhone 4s, поэтому я хочу удалить его.
Если я добавлю код в prepareForSegue функция, это будет проблема.
любой лучший способ достичь этого?
18 ответов:
если вы хотите, чтобы стрелка назад так следующий код положить в на
didFinishLaunchingWithOptionsметод.
For Objective-C[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60) forBarMetrics:UIBarMetricsDefault];
For Swiftlet BarButtonItemAppearance = UIBarButtonItem.appearance() BarButtonItemAppearance.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .normal)другой вариант дам ниже.
на
Objective Cself.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];на
Swiftself.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)
вы можете использовать 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"
вы можете создать подкласс для всех
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 launchOptionsUIBarButtonItem.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наdidFinishLaunchingWithOptionsfunc.внешний вид должен быть установлен на
.Highlightedсостояние тоже, чтобы избежать текстов, которые показывают, когда пользователь нажимает кнопку "Назад".

Comments