Я маю 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
сам по собі працює нормально, але той, що міститься у поданні стека, не відображає його вміст, навіть якщо його розмір правильний.
Я не знаю, чому це так, чи є трюк, який я міг би використати, щоб веб-перегляд працював коректно в поданні стека. Але причина зрозуміла, якщо не причина.