Как изменить размер изображения или представления изображения в панели навигации (не размер файла) - PullRequest
0 голосов
/ 01 ноября 2019

Я пытаюсь заставить приложение работать на мою работу. В этом приложении мы хотим показать сайт через WKWebViewKit и в навигационной панели должен быть логотип нашей компании. Также есть кнопка обновления, которая должна перезагрузить URL, который я набрал в коде, а не только страницу, которая открывается в данный момент.

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

Вот код для ViewController.swift:

import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate {
    var webView: WKWebView!

    override func loadView() {
        webView = WKWebView()
        webView.navigationDelegate = self
        view = webView
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        // 1
        let url = URL(string: "https://example.com")!
        webView.load(URLRequest(url: url))

        // 2
        let refresh = UIBarButtonItem(barButtonSystemItem: .refresh, target: webView, action: #selector(webView.reload))
        toolbarItems = [refresh]
        navigationController?.isToolbarHidden = false
    }



    override func viewDidAppear(_ animated: Bool) {

        let navController = self.navigationController!

        navController.navigationBar.barStyle = UIBarStyle.black
        navController.navigationBar.tintColor = UIColor.white
        let image = UIImage (named: "logo-white")
        let imageView = UIImageView(image: image)

        let bannerWidth = navController.navigationBar.frame.size.width
        let bannerHeight = navController.navigationBar.frame.size.height

       let bannerX = bannerWidth / 2 - image!.size.width / 2
       let bannerY = bannerHeight / 2 - image!.size.height / 2

        imageView.frame = CGRect(x: bannerX, y: bannerY, width: bannerWidth, height: bannerHeight)
        imageView.contentMode = .scaleAspectFit

        navigationItem.titleView = imageView
    }

Ответы [ 3 ]

1 голос
/ 01 ноября 2019

Проблема в этой строке:

imageView.frame = ...

Нет. Дайте изображению высоту и ширину вида ограничения , а не фрейм.

0 голосов
/ 01 ноября 2019

Я заменил его фрагментом кода, который я нашел в сети, и теперь он работает:

        let logoContainer = UIView(frame: CGRect(x: 0, y: 0, width: 250, height: 25))
        let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 250, height: 25))
        imageView.contentMode = .scaleAspectFit
        let image = UIImage(named: "logo-white")
        imageView.image = image
        logoContainer.addSubview(imageView)
        navigationItem.titleView = logoContainer

Но на мой второй вопрос по поводу кнопки обновления не ответили: - (

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

// 2
        let refresh = UIBarButtonItem(barButtonSystemItem: .refresh, target: webView, action: #selector(webView.reload))
        toolbarItems = [refresh]
        navigationController?.isToolbarHidden = false
    }
0 голосов
/ 01 ноября 2019

Вы также можете обнаружить, что независимо от того, что вы установили, ширина и высота не влияют. Кажется, я не нашел UIStackView в иерархии представлений, но одно можно сказать наверняка: ограничения ширины и высоты titleView, navigationItem уже выполнены, ширина примерно на определенном расстоянии слева и справаи высота равна.

Далее вы можете сделать это, но обычно рекомендуется использовать autolayout, я использую SnapKit здесь.

let titleView = UIView()
let image = UIImage (named: "logo-white")
let imageView = UIImageView(image: image)
imageView.contentMode = .scaleAspectFit

titleView.addSubview(imageView)
imageView.snp.makeConstraints { (make) in
     make.center.equalTo(titleView)
     make.width.height.equalTo(40)
}
navigationItem.titleView = titleView
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...