Leftbarbuttonitem не отображается в навигационной панели

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

UIImage *backButtonImage = [UIImage imageNamed:@"backbuttonCB"];
CGRect buttonFrame = CGRectMake(0, 0, backButtonImage.size.width, backButtonImage.size.height);
UIButton *backButton = [[UIButton alloc] initWithFrame:buttonFrame];
[backButton setImage:backButtonImage forState:UIControlStateNormal];
UIBarButtonItem *backBarButtonItem= [[UIBarButtonItem alloc] initWithCustomView: backButton];
self.navigationItem.leftBarButtonItem = backBarButtonItem;

При запуске приложения никогда не отображается кнопка на панели.

Затем я попытался применить этот другой метод следующим образом.

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"backbuttonCB"] style:UIBarButtonItemStylePlain target:nil action:@selector(methodname)];

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

Любая идея, как я могу решить эту проблему?

EDIT: дополнительная информация, если это помогает. Это первый вид в стеке навигации. Навигационный стек отображается модально, т.е. Имеется предыдущий контроллер представления, и между предыдущим контроллером представления и навигационным контроллером существует модальный отступ. Это первый вид в стеке навигации.

ИЗМЕНИТЬ: ПРОБЛЕМА ИСПРАВЛЕНО. Я думаю, что это была ошибка в xcode, потому что когда я перезапустил xcode и протестировал его с использованием фактического устройства вместо эмулятора, он работал нормально. Тем не менее, по-прежнему не работает на эмулятор.

Ответ 1

Попробуйте установить этот параметр leftBarButtonItem. При представлении модально это не отображается.

self.navigationController?.navigationBar.topItem.leftBarButtonItem =

Ответ 2

Вызов myButton.sizeToFit() перед назначением leftBarButtonItem помог мне.

    let cancelButton = UIButton()
    cancelButton.backgroundColor = .red
    cancelButton.setTitle("Common/Cancel".localized, for: .normal)
    cancelButton.sizeToFit() //!!!
    let cancelBarButton = UIBarButtonItem(customView: cancelButton)
    navigationItem.leftBarButtonItem = cancelBarButton

Ответ 3

Попробуйте использовать этот код,

self.navigationItem.hidesBackButton=YES;

UIImage *buttonImage = [UIImage imageNamed:@"Back"];
UIButton *aButton = [UIButton buttonWithType:UIButtonTypeCustom];
[aButton setImage:buttonImage forState:UIControlStateNormal];
aButton.frame = CGRectMake(0.0,0.0,buttonImage.size.width,buttonImage.size.height);
[aButton addTarget:self action:@selector(backBtnTapped) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithCustomView:aButton];
self.navigationItem.leftBarButtonItem = backButton; 

Ответ 4

У меня была та же проблема. Чтобы увидеть кнопку, мне пришлось изменить цвет оттенка, здесь код в Swift:

self.navigationItem.leftBarButtonItem = UIBarButtonItem.init(image:UIImage.init(named: "btn_back_default")!, style:UIBarButtonItemStyle.Plain, target: self, action: Selector("back"))
self.navigationItem.leftBarButtonItem?.tintColor = UIColor.whiteColor()

Ответ 5

Замените свой код, чтобы инициализировать кнопку как customType следующим образом:

UIImage *backButtonImage = [UIImage imageNamed:@"backButtonCB"];
    CGRect buttonFrame = CGRectMake(0, 0, backButtonImage.size.width, backButtonImage.size.height);
    UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [backButton setFrame:buttonFrame];
    [backButton setImage:backButtonImage forState:UIControlStateNormal];
    UIBarButtonItem *backBarButtonItem= [[UIBarButtonItem alloc] initWithCustomView: backButton];
    self.navigationItem.leftBarButtonItem = backBarButtonItem;

Надеюсь, что это поможет....:)

Ответ 6

Добавьте элемент навигации в раскадровку Views и создайте для него выход в ViewController. Затем используйте розетку вместо self.navigationController?.navigationItem для ссылки на leftBarButtonItem.

Ответ 7

Просто забудьте панель навигации при представлении контроллера представления и используйте обычную кнопку где-нибудь еще, внизу экрана. (Не кнопка, похожая на элемент навигации.) Это то, что Android делает лучше: кнопка "Назад" находится ближе к вашему пальцу.