Как разместить изображение в правой панели - PullRequest
0 голосов
/ 14 марта 2019

Я пытался поместить кнопку 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)

Ответы [ 4 ]

0 голосов
/ 14 марта 2019

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

enter image description here см. яблочный документ для получения дополнительной информации: 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

0 голосов
/ 14 марта 2019

Попробуйте этот модуль 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
    }

Вам необходимо создать Bridging Header для работы с этим модулем Obj-C.

: D

0 голосов
/ 14 марта 2019

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

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")
    }
}
0 голосов
/ 14 марта 2019

Попробуйте использовать следующий код:

        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
...