mám UIWebView
vo svojej aplikácii a pokúšam sa použiť loadHTMLString(_:, baseURL:)
načítať HTML, ktoré je uložené v súbore String
v aplikácii. Webové zobrazenie sa vždy zobrazí ako obyčajný sivý obdĺžnik bez obsahu. Ak uložím reťazec HTML do súboru a načítam ho v prehliadači Safari na počítači Mac, stránka sa vykreslí podľa očakávania.
Myslel som si, že to môže byť niečo o HTML, tak som to zredukoval na minimálny test, ktorý dosiahne rovnaké výsledky:
let myHTMLString = "<html><head></head><body><p>This is a test</p></body></html>"
myWebView.loadHTMLString(myHTMLString, baseURL: nil)
Stále sivý obdĺžnik.
Prehľadal som tu ďalšie odpovede, aby som skontroloval a overil rôzne potenciálne relevantné podrobnosti:
- Povolenie ľubovoľného načítania nemá žiadny účinok. Niežeby to malo vplyv na môj testovací prípad vyššie, ale niektorí ľudia s tým majú problémy.
- Na vzdialené ladenie súboru som použil Safari
UIWebView
. K dispozícii je všetok obsah, ktorý v aplikácii pre systém iOS jednoducho nie je viditeľný. - Veľkosti zobrazené pri ladení zo Safari sa zhodujú s tým, čo vidím, ak používam ladiaci nástroj na zobrazenie Xcode. Je zobrazené webové zobrazenie a Safari ukazuje, že má správnu veľkosť.
- Som implementoval
UIWebView
delegovať metódy a nastaviť vlastnosť delegáta. Dostávam telefonáty nawebViewDidStartLoad(_:)
,webViewDidFinishLoad(_:)
, awebView(_:shouldStartLoadWith:navigationType:)
, a v poslednom prípade sa vždy vrátimtrue
. Nie je hlásená žiadna chyba- nikdy nedostanem awebView(_:didFailLoadWithError:)
. - Ak zmením farbu pozadia súboru
UIWebView
Mám inú farbu obdĺžnika, ale stále nevidím žiadny viditeľný obsah stránky.
Čo mi ušlo? Malo by ísť o triviálny prípad, ale nevidím žiadny viditeľný obsah.
odpovede:
1 pre odpoveď č. 1Je dosť zvláštne, že sa vám zobrazuje chyba, ale už ste sa pokúsili nastaviť hodnotu pre baseURL
parameter? Niečo ako: URL(string: "www.google.com")
1 pre odpoveď č. 2
Skúste nový, prázdny UIViewController, pričom ako kód zadajte iba toto:
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 pre odpoveď č. 3
Po preskúmaní a vyskúšaní nového projektu (inšpirovaný odpoveďou spoločnosti @DonMag) sa zdá, že problémom je, že UIWebView
bol obsiahnutý v a UIStackView
. Napriek tomu, že rozmery webového zobrazenia boli správne, nejakým spôsobom to bránilo vykresľovaniu obsahu. Skúsil som to v jednoduchom testovacom projekte a správanie sa prenáša- jednoducho UIWebView
sám o sebe funguje, ale ten, ktorý je obsiahnutý v zobrazení zásobníka, nevykresľuje jeho obsah, aj keď je jeho veľkosť správna.
Neviem, prečo to je alebo či existuje nejaký trik, ktorý by som mohol použiť na správne fungovanie webového zobrazenia v zobrazení zásobníka. Ale príčina je jasná, ak nie dôvod.