簡體   English   中英

如何更改導航欄中的圖像或圖像視圖的大小(不是文件大小)

[英]How to change the size of an image or image view in the navigationBar (not the file-size)

我正在嘗試讓一個應用程序為我的工作工作。 在這個應用程序中,我們希望通過 WKWebViewKit 顯示一個網站,並且在導航欄中應該是我們公司的徽標。 還有一個刷新按鈕,它應該重新加載我在代碼中輸入的 URL,而不僅僅是當前打開的頁面。

我已經嘗試過尋找解決方案,但圖像仍然是導航欄的完整大小。 我也沒有找到刷新按鈕的解決方案。 上次我使用歷史 go 回 -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
    }

問題是這一行:

imageView.frame = ...

不。給圖像視圖的高度和寬度約束,而不是框架。

您可能還會發現,無論您設置什么,寬度和高度都沒有影響。 好像沒有通過view層級找到UIStackView ,但是有一點可以確定: titleViewnavigationItem的寬高約束已經做了,寬度左右有一定距離左右,高度相等.

接下來就可以了,不過一般推薦使用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

我用在 web 上找到的這段代碼替換了它,現在它可以工作了:

        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
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM