UIToolbarItems и UIBarButtonItems не отображаются в симуляторе или отключаются, я что-то упустил? - PullRequest
0 голосов
/ 04 мая 2019

Я создал WKWebView программно с некоторыми UIBarButtonItems. Кнопка «Открыть» в правом верхнем углу и 3 UIToolbarItems в нижней части для ProgressView, FlexibleSpace и кнопка перезагрузки. Мой симулятор не может загрузить их на экран и выглядит так, будто он неправильно загружен в симулятор.

import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate {
    var webView: WKWebView!
    var progressView: UIProgressView!
    var websites = ["apple.com", "google.com"]

//loadView() func
override func loadView() {

    //create an instance of WKWebView()
    webView = WKWebView()
    webView.navigationDelegate = self
    view = webView
}

override func viewDidLoad() {
    super.viewDidLoad()

    //get URL and make a load URLRequest
    guard let url = URL(string: "https://www." + websites[0]) else { return }
    webView.load(URLRequest(url: url))
    webView.allowsBackForwardNavigationGestures = true

    //set BarButtonItem on the top right of page
    navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Open", style: .plain, target: self, action: #selector(openTapped))

    //add UIToolbar items with UIBarButtonItems
    let spacer = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
    let reload = UIBarButtonItem(barButtonSystemItem: .refresh, target: webView, action: #selector(webView.reload))

    //add progressView
    progressView = UIProgressView(progressViewStyle: .default)
    progressView.sizeToFit()
    let progressButton = UIBarButtonItem(customView: progressView)

    //add items to toolbarItems array
    toolbarItems = [progressButton, spacer, reload]
    navigationController?.isToolbarHidden = false

//create actionSheet UIAlertActionController for bar button drop down
@objc func openTapped() {
    let alert = UIAlertController(title: "Open new page!", message: nil, preferredStyle: .actionSheet)

    for website in websites {
        alert.addAction(UIAlertAction(title: website, style: .default, handler: openPage))
    }

    alert.addAction(UIAlertAction(title: "Cancel", style: .cancel))
    alert.popoverPresentationController?.barButtonItem = self.navigationItem.rightBarButtonItem
    present(alert, animated: true)
}

//handlers for each UIAlertAction
func openPage(action: UIAlertAction) {
    guard let actionTitle = action.title else { return }
    guard let url = URL(string: "https://" + actionTitle) else { return }
    webView.load(URLRequest(url: url))
}

//set webView title to web page title
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    title = webView.title
}

Я пробовал экран разных размеров, но ни один из них не позволяет отображать элементы UIBarButtonItems и UIToolbarItems на симуляторе.

как выглядит мой симулятор iphoneXR на данный момент

1 Ответ

0 голосов
/ 05 мая 2019

Вам необходимо встроить ViewController в контроллер навигации.

Открыть раскадровку -> Редактор -> Встроить -> Контроллер навигации.

Кроме того, в вашем коде отсутствуетфигурная скобка после navigationController?.isToolbarHidden = false, чтобы закрыть метод viewDidLoad.

...