Как поместить изображение в rightbarbuttonitem

#ios #swift #uinavigationbar #rightbarbuttonitem

#iOS #swift #панель uinavigationbar #rightbarbuttonitem

Вопрос:

Я пытался разместить hamburger кнопку (три параллельные линии) справа от titleView на панели навигации, но каждый раз, когда я это делаю, изображение, которое я вставляю, покрывает всю панель навигации и удаляет изображение, которое у меня есть titleView .

Если я выберу изображение по умолчанию в редакторе раскадровки, оно появится в правой части панели навигации без каких-либо проблем, но как только я выбираю кнопку гамбургера в редакторе раскадровки, я получаю ту же проблему, что и раньше. Я пробовал использовать несколько разных изображений и немного изменил код, но безуспешно. Есть ли способ изменить размер изображения, которое я использую, чтобы оно правильно помещалось на панели навигации, или просто что-то не так с моим кодом?

Вот мой код из viewController.swift приведенного ниже:

 override func viewDidAppear(_ animated: Bool) {
    let nav = self.navigationController?.navigationBar
    let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 40, height: 40))

    imageView.contentMode = .scaleAspectFit

    let titleImage = UIImage(named: "logowhitecircle")
    imageView.image = titleImage

    navigationItem.titleView = imageView

    let menuButton = UIButton(frame: CGRect(x: 0, y: 0, width: 40, height: 40))

    menuButton.contentMode = .scaleAspectFit

    let menuImage = UIImage(named: "hamburgericon")
    menuButton.setImage(menuImage, for: .normal)

    self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: menuButton)
  

Комментарии:

1. Есть ли у вас hamburgericon.png с @2x и @3x версиями все в правильном размере для UIBarButtonItem ? И зачем использовать UIButton ? Просто используйте UIBarButtonItem инициализатор, который принимает изображение.

2. Проблема в том, что вы не установили никаких ограничений на ширину и высоту автозапуска для вашей кнопки.

Ответ №1:

Вам нужно установить размер изображения в ресурсах изображения, например, 3x = 84px, 2x = 56px, 1x = 28px,

введите описание изображения здесь смотрите документ Apple для получения дополнительной информации:https://developer.apple.com/design/human-interface-guidelines/ios/icons-and-images/custom-icons

 let menuButton = UIBarButtonItem(image: UIImage(named: "logowhitecircle"), style: .plain, target: self, action: #selector(menuButtonTapped(_:)))
self.navigationItem.rightBarButtonItem = menuBu
  

tton

Ответ №2:

Попробуйте использовать приведенный ниже код:

         let imageBurger = UIImage(named: "hamburgericon")!
        let btnLeftMenu = UIButton(type: .system)
        btnLeftMenu.bounds = CGRect(x: 10, y: 0, width: imageBurger.size.width, height: imageBurger.size.height)
        btnLeftMenu.contentEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)

        btnLeftMenu.setImage(imageBurger, for: UIControl.State())
        btnLeftMenu.setTitle(title, for: .normal)
        let leftButton = UIBarButtonItem(customView: btnLeftMenu)
        self.navigationItem.leftBarButtonItem = leftButton
  

Ответ №3:

Попробуйте этот модуль FFBadgedBarButtonItem это простой в использовании модуль, вот ссылка на документацию

Ниже приведен мой код, как это реализовать!

 let image = UIImage(named: "yourImage")

let finalImage = resizeImage(image: image!, newWidth: 30)

navigationItem.rightBarButtonItem = FFBadgedBarButtonItem(image: finalImage, target: self, action: #selector(rightButtonTouched))
  

И вот вызывающая функция

 @objc func rightButtonTouched() {
        // what event you need to perfom by clicking on this button
    }
  

Для работы с этим модулем Obj-C необходимо создать соединительный заголовок.

: D

Ответ №4:

Попробуйте это:

 import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
            super.viewDidLoad()
            //create a new button
            let button: UIButton = UIButton.buttonWithType(UIButtonType.Custom) as! UIButton
            //set image for button
            button.setImage(UIImage(named: "hamburgericon"), forState: UIControlState.Normal)
            //add function for button
            button.addTarget(self, action: "customButtonPressed", forControlEvents: UIControlEvents.TouchUpInside)
            //set frame
            button.frame = CGRectMake(0, 0, 40, 40)

            let barButton = UIBarButtonItem(customView: button)
            //assign button to navigationbar
           self.navigationItem.rightBarButtonItem = barButton
    }

    //This method will call when you press button.
    func customButtonPressed() {

            println("button pressed")
    }
}