UIWebView的loadHTMLString方法显示空白屏幕

19

我在使用UIWebView的loadHTMLString时遇到了一个奇怪的问题,当我传入我的内容HTML字符串调用loadHTMLString时,它只会显示一个空白视图。无论htmlstring的内容是什么,它都不做任何事情。

奇怪的是,几周前我在模拟器和设备上测试时,它还可以工作。我的代码如下:

NSMutableString *sHtmlBuf = [NSMutableString stringWithString:@"<body style=\"background-color: #000000; color: #FFFFFF; font-family: Helvetica; font-size: 10pt; width: 300px; word-wrap: break-word;\">"];

if ([m_oCallArray count] > 0 || [m_oPutArray count] > 0) {
    [sHtmlBuf appendString:sWarrTitle];

    if ([m_oCallArray count] > 0) {
        NSString *formattedCall = [NSString stringWithFormat:@"%@ %@<br />",sCallTitle,[self arrayToString:m_oCallArray]];
        [sHtmlBuf appendFormat:@"%@ ",formattedCall];
    }

    if ([m_oPutArray count] > 0) {
        NSString *formattedPut = [NSString stringWithFormat:@"%@ %@<br />",sPutsTitle,[self arrayToString:m_oPutArray]];
        [sHtmlBuf appendFormat:@"%@ ",formattedPut];
    }

}

if ([m_oBullArray count] > 0 || [m_oBearArray count] > 0) {
    [sHtmlBuf appendString:sCbbcTitle];

    if ([m_oBullArray count] > 0) {
        NSString *formattedBull = [NSString stringWithFormat:@"%@ %@<br />",sBullTitle,[self arrayToString:m_oBullArray]];
        [sHtmlBuf appendFormat:@"%@ ",formattedBull];
    }

    if ([m_oBearArray count] > 0) {
        NSString *formattedBear = [NSString stringWithFormat:@"%@ %@<br />",sBearTitle,[self arrayToString:m_oBearArray]];
        [sHtmlBuf appendFormat:@"%@ ",formattedBear];
    }

}

if ([m_oOtherArray count] > 0) {
    NSString *formattedOther = [NSString stringWithFormat:@"%@ %@<br />",sOtherTitle,[self arrayToString:m_oOtherArray]];
    [sHtmlBuf appendFormat:@"%@ ",formattedOther];
}

[m_oDataPresentView loadHTMLString:sHtmlBuf baseURL:nil];

(注意: 在此问题之前,HTML可以在常规网页浏览器上渲染,因此HTML不是问题)

编辑: 添加了初始化代码:

//Create wcbbc panel
wcbbcPanel = [[WarrantsAndCbbc alloc] initWithFrame:CGRectMake(320, 0, 320, 230)];
[m_oMainContentScrollView addSubview:wcbbcPanel];

UIView的初始化代码:

- (id)initWithFrame:(CGRect)frame {

    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code.
        CGRect oFrame = frame;
        CGPoint oPositionCoords = CGPointMake(0, 0);
        oFrame.origin = oPositionCoords;

        m_oDataPresentView = [[UIWebView alloc] initWithFrame:oFrame];
        [m_oDataPresentView loadHTMLString:@"<html><body style=\"background-color: #000000; color: #FFFFFF; font-family: Helvetica; font-size: 10pt; width: 300px; word-wrap: break-word;\"></body></html>" baseURL:nil];
        m_oDataPresentView.delegate = self;

        [self addSubview:m_oDataPresentView];
    }
    return self;
}

您能否展示一下您实例化 UIWebView 并将其添加到您的视图中的代码? - donkim
3个回答

41
经过一番侦查,我发现在委托函数中返回NO的意思是:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

将拒绝loadHTMLString请求。返回YES解决了我的问题。


shouldStartLoadWithRequest询问webview是否应继续加载页面。返回NO将停止网页加载。 - futureelite7
2
在我的情况下,我想要拦截链接并将它们发送到Safari。为了做到这一点:if(navigationType == UIWebViewNavigationTypeLinkClicked) return NO; else return YES; - Max
对于 Swift:"WKNavigationDelegate 提供了 webView:decidePolicyForNavigationAction:decisionHandler:"。 - Efren

5

我刚遇到了同样的问题,作为一个新手,我很惊讶地发现当我没有执行 DID NOT DO 操作时问题得到了解决。

webview = [[UIWebView alloc]init];

但是,由于它已经被设置为插座,所以我只需要调用它,而不是进行其他操作。
[webView loadHTMLString:mystring baseURL:nil];

这对我有很大的帮助。我猜想使用ARC,你不必再手动初始化自己的项了? - jocull

0
从您的UIWebView初始化代码中看,似乎您正在将wcbbcPanel添加到屏幕外的位置。请尝试使用以下代码替代:
wcbbcPanel = [[WarrantsAndCbbc alloc] initWithFrame:CGRectMake(0, 0, 320, 230)];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接