/ / UIWebView залишається порожнім під час завантаження рядка HTML - ios, swift, uiwebview

UIWebView залишається порожнім під час завантаження рядка HTML - ios, swift, uiwebview

Я маю UIWebView у своєму додатку, і я намагаюся використовувати loadHTMLString(_:, baseURL:) для завантаження HTML, який зберігається в String в додатку. Веб-перегляд завжди відображається у вигляді звичайного сірого прямокутника без вмісту. Якщо я зберігаю рядок HTML у файлі та завантажую його у Safari на своєму Mac, сторінка відображається належним чином.

Я думав, можливо, це щось стосується HTML, тому я звів його до мінімального тесту, який дає ті самі результати:

let myHTMLString = "<html><head></head><body><p>This is a test</p></body></html>"
myWebView.loadHTMLString(myHTMLString, baseURL: nil)

Все ще сірий прямокутник.

Я переглянув тут інші відповіді, щоб перевірити та перевірити різні релевантні деталі:

  • Дозвіл на довільні навантаження не впливає. Не те щоб це мало значення для мого тесту, описаного вище, але деякі люди мали проблеми з цим.
  • Я використовував Safari для віддаленої налагодження UIWebView. Весь вміст є, його просто не видно в додатку iOS.
  • Розміри, показані під час налагодження із Safari, збігаються з тим, що я бачу, якщо використовую налагоджувач вигляду Xcode. Веб-перегляд видно, а Safari показує, що він правильного розміру.
  • Я реалізував UIWebView делегуйте методи та встановлюйте властивість делегата. Мені телефонують webViewDidStartLoad(_:), webViewDidFinishLoad(_:), і webView(_:shouldStartLoadWith:navigationType:), і в останньому випадку я завжди повертаюся true. Про помилку не повідомляється - я ніколи не отримую webView(_:didFailLoadWithError:).
  • Якщо я зміню колір тла UIWebView Я отримую інший колір прямокутника, але я все одно не отримую жодного видимого вмісту сторінки.

Що я пропустив? Це має бути тривіальним випадком, але я не отримую видимого вмісту.

Відповіді:

1 для відповіді № 1

Це дуже дивна помилка, яку ви отримуєте, але ви вже намагалися встановити значення для baseURLпараметр? Щось на зразок: URL(string: "www.google.com")


1 для відповіді № 2

Спробуйте свіжий, порожній UIViewController, лише як код:

import UIKit

class TestViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

let newWebView = UIWebView(frame: CGRect(x: 8, y: 8, width: 300, height: 400))
self.view.addSubview(newWebView)

// cyan background html
let myHTMLString = "<html><head></head><body bgcolor=#00ffff><p>This is a test</p></body></html>"
newWebView.loadHTMLString(myHTMLString, baseURL: nil)
}

}

1 для відповіді № 3

Після розслідування та випробування нового проекту (натхненного відповіддю @DonMag), схоже, проблема в тому, що UIWebView містився в UIStackView. Хоча розміри веб-перегляду були правильними, це якимось чином заважало йому відтворювати вміст. Я спробував це в простому тестовому проекті, і поведінка переносить - просто UIWebView сам по собі працює нормально, але той, що міститься у поданні стека, не відображає його вміст, навіть якщо його розмір правильний.

Я не знаю, чому це так, чи є трюк, який я міг би використати, щоб веб-перегляд працював коректно в поданні стека. Але причина зрозуміла, якщо не причина.