имам 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
се съдържаше в a UIStackView
, Въпреки че размерите на уеб изгледа бяха правилни, това по някакъв начин не му позволяваше да изобразява съдържание. Опитах това в обикновен тестов проект и поведението се пренася - просто UIWebView
сам по себе си работи добре, но този, съдържащ се в изглед на стека, не показва съдържанието му, дори ако размерът му е правилен.
Не знам защо това е или има ли един трик, който бих могъл да използвам, за да накарам уеб изглед да работи правилно в изглед на стек. Но причината е ясна, ако не и причината.