Как установить положение изображения и размер изображения, которое вставляется в панель навигации? - PullRequest
0 голосов
/ 11 октября 2018

на самом деле я не знаю, как правильно сделать изображение внутри навигационной панели, например, с помощью контроллера навигации или с помощью собственного представления самостоятельно

enter image description here

Мне нужно вставить эти 2 изображения в качестве кнопки панели и заголовка изображения enter image description here enter image description here

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

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // insert image title
        let aspectRatio : CGFloat = 0.25
        let widthOfImageHeader = view.frame.width * 0.5
        let heightOfImageHeader = widthOfImageHeader * aspectRatio

        let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: widthOfImageHeader, height: heightOfImageHeader))
        imageView.contentMode = .scaleAspectFit
        let image = UIImage(named: "testImage2")
        imageView.image = image
        navigationItem.titleView = imageView


         // set bar button image
         //create a new button
         let button = UIButton(type: .custom)
         //set image for button
         button.setImage(UIImage(named: "hamburgerIcon"), for: .normal)

         //set frame
         button.frame = CGRect(x: 0, y: 0, width: 53, height: 51)

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


}

, но результат будет похож на изображение ниже: enter image description here

положение изображенияназвание не точно в центре для iPhone 5s, а кнопка панели кажется немного неактивной справа.

, и если я назначу кнопку правой панели изображения, используя

    /

/create a left button
        let button = UIButton(type: .custom)
        //set image for button
        button.setImage(UIImage(named: "hamburgerIcon"), for: .normal)

        //set frame
        button.frame = CGRect(x: 0, y: 0, width: 53, height: 51)

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

        //create a right button
        let button2 = UIButton(type: .custom)
        //set image for button
        button2.setImage(UIImage(named: "backButton"), for: .normal)

        //set frame
        button2.frame = CGRect(x: 0, y: 0, width: 53, height: 51)

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

, результатеще страннее

enter image description here

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

будет гораздо проще, если я использую пользовательский вид, но ... странно ли, если я использую пользовательский вид, который использует как панель навигации?Я новичок в iOS Developer.Заранее спасибо

1 Ответ

0 голосов
/ 11 октября 2018

Хорошо, вот что я обычно делаю в проекте с такими требованиями (изображение в заголовке navBar и пользовательские элементы кнопок панели).

Чтобы ответить на первый вопрос, вы можете сделать все, что угодноwant.

  1. Иметь действительно собственное представление, в то время как ваш viewController встроен в UINavigationController.Но обязательно спрячьте navBar.
  2. Имейте видимый navBar и viewContorller, встроенный в UINavigationController.

Идеальный способ для меня - последний.

Приведенный ниже пример проекта был сделан с использованием моей собственной старой платформы: https://github.com/glennposadas/gpkit-ios

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

Если вы хотите получить результат ниже, вот как я это делаю:

import GPKit
import UIKit

class ViewController: UIViewController {

    // MARK: - Properties

    internal lazy var button_Close: UIButton = {
        let button = UIButton(type: .custom)
        button.setImage(UIImage(named: "ham"), for: .normal)
        button.imageEdgeInsets = UIEdgeInsets.init(top: 0, left: -30, bottom: 0, right: 0)
        //button.addTarget(self, action: #selector(hamburger(_:)), for: .touchUpInside)
        return button
    }()

    // MARK: - Functions
    // MARK: Overrides

    override func viewDidLoad() {
        super.viewDidLoad()
        GPLog(classSender: self, log: "viewDidLoad!")

        // Title View Test: -

        let navBarImage = UIImage(named: "ic_logo_navbar")!
        self.setNavBarTitleWithFeedback(image: navBarImage, navBarTintColor: .white)

        self.makeNavBarColor(color: UIColor.colorWithRGBHex(0x332F39), itemsTintColor: .white)

        // Barbutton

        let barButton = UIBarButtonItem(customView: self.button_Close)
        self.button_Close.frame = CGRect(x: 0, y: 0, width: 55.0, height: 44.0)
        let negativeSpacer = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.fixedSpace, target: nil, action: nil)
        if #available(iOS 11.0, *) {
            negativeSpacer.width = -30
        }
        self.navigationItem.leftBarButtonItems = [negativeSpacer, barButton]
    }
}

extension ViewController: GPTitleViewDelegate {
    func gpTitleView(userDidTapTitleView gpTitleView: GPTitleView) {
        GPLog(classSender: self, log: "userDidTapTitleView?")
    }

    func gpTitleView(userDidFinishLongPress gpTitleView: GPTitleView) {
        GPLog(classSender: self, log: "userDidFinishLongPress?")
    }
}

Результат: У меня нет вашего шестнадцатеричного цвета, поэтому он выглядит уродливо.

enter image description here

Я надеюсь, что это elps.

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