[英]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
,但是有一點可以確定: 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
我用在 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.