【问题标题】:how to set background colour to transparent, so as to show carrier information, time and battery status如何将背景颜色设置为透明,以便显示运营商信息、时间和电池状态
【发布时间】:2017-02-13 07:27:46
【问题描述】:

我正在使用 WKWebView 在我的 Swift 3+ 应用程序中打开网页。 我没有使用故事板或 XIB。

当我的 webview 加载时,由于黑色背景颜色(默认设置),它隐藏了运营商信息、蜂窝网络信号强度指示器(点)、WiFi/4G 连接指示器、时间和电池状态

我想在顶部状态栏下方显示我的 webview。 我使用UIApplication.shared.statusBarFrame.height 获得了状态栏的高度 (预计是20,并确认是这样)

我怎样才能让两者看起来都很好? (白色背景/透明度) 这样用户就可以在顶部看到状态栏信息,然后按预期看到 webview。

Controller.swift

import UIKit
import WebKit

class MyWebViewController: UIViewController, WKNavigationDelegate {
    var urlString:String? = nil
    let myWebView = WKWebView(frame:CGRect(x: 0, y: 32+UIApplication.shared.statusBarFrame.height, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height-32-UIApplication.shared.statusBarFrame.height))
    let button = UIButton(frame: CGRect(x:UIScreen.main.bounds.width - 100,y:50,width:50,height:50))
    let navpath = UITextView(frame:CGRect(x: 0, y: UIApplication.shared.statusBarFrame.height, width: UIScreen.main.bounds.width, height: 32))

    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.isOpaque=true
        self.view.backgroundColor = UIColor.clear
        print("status bar height : \(UIApplication.shared.statusBarFrame.height)")
        button.backgroundColor = UIColor.red
        button.setTitle("close", for: .normal)
        myWebView.navigationDelegate = self
        myWebView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        myWebView.load(NSURLRequest(url: targetUrl as URL) as URLRequest)
        view.addSubview(myWebView)
        button.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        navpath.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        view.addSubview(navpath)
        myWebView.addSubview(button)
    }
    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
        //print(navigationAction.navigationType)
        let navReq = navigationAction.request
        let targetUrl = navReq?.url
        let link = targetUrl?.absoluteString
        print("targetURL : \(targetUrl)\n link : \(link)")
        navpath.text=link
        //self.myWebView.load(navReq)
        decisionHandler(.allow)
    }
}

旋转时,绿色电池指示灯会隐藏。我也想解决这个问题。导航路径(地址栏文本框)和按钮(关闭)也放错了位置,我想我需要自动布局/约束管理器或其他东西。

当前样本正在加载duckduckgo:

肖像

风景

另外,让我知道 UITextView 是否是显示地址栏(网页 URL)的好选择,或者我应该使用 UILabel 或其他可能更好的导航栏?但是,我想这需要storyboard/xib。

【问题讨论】:

    标签: ios swift webview statusbar


    【解决方案1】:

    您可以为您的视图设置prefferedStatusBarStylehttps://developer.apple.com/reference/uikit/uiviewcontroller/1621416-preferredstatusbarstyle

    在您的视图控制器中:

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
    

    如果不同的视图有不同的状态栏样式,您可以使用setNeedsStatusBarAppearanceUpdate() 更新它,例如。在viewDidAppear.

    https://developer.apple.com/reference/uikit/uiviewcontroller/1621354-setneedsstatusbarappearanceupdat

    【讨论】:

    • 你能帮我解决轮换问题吗?
    • 在使用override var prefersStatusBarHidden: Bool { }时尝试返回false
    猜你喜欢
    • 1970-01-01
    • 2016-11-06
    • 1970-01-01
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    相关资源
    最近更新 更多