从iOS 10.3开始,Paginated UIWebview忽略CSS背景属性

时间:2017-04-11 09:34:29

标签: ios uiwebview

自iOS 10.3起,如果UIWebView的paginationMode属性设置为UIWebPaginationModeLeftToRight,则html加载页面的CSS属性背景将被忽略。

这是Apple方面的一个错误,因此我填写了错误报告:radar/31552458

但是,我真的需要在我的应用程序中修复此错误,或找到解决方法。 将UIWebView背景设置为清除且不透明为NO不适用于分页Web视图。

编辑06/21/2017:Durty解决方法

由于我找不到解决问题的干净解决方案,我将我的HTML正文内容嵌入到div中并将背景颜色应用于此div。但是,有时div不会填充最后一页,因此背景不会覆盖我的最后一页。

使用HTMLReader lib:

将我的html内容嵌入代码中的主div中
- (NSString *)encapsulateHTMLFromData:(NSData *)data encoding:(NSStringEncoding)encoding
{
    NSString *html = [[NSString alloc] initWithData:data encoding:encoding];

    HTMLDocument *document = [HTMLDocument documentWithString:html];

    NSOrderedSet *children = [document.bodyElement children];

    HTMLElement *div = [[HTMLElement alloc] initWithTagName:@"div" attributes:@{@"id":@"my_main_container"}];

    for (HTMLNode *child in children)
    {
        [div addChild:child];
    }

    [document.bodyElement addChild:div];

    return [document innerHTML];
}

更改主要div上的背景颜色:

NSString *kCSSBody = @"body{margin:0px !important; padding:0px !important} #my_main_container{-webkit-hyphens:auto; text-align:justify; padding:1em 1em 1em 1em; background-color:#123456;}";

- (void)changeBackgroundColor:(UIColor *)backColor
{
    NSString *hexBackColor = [self hexStringFromColor:backColor];
    NSString *css = [NSString stringWithFormat:@"%@{ background-color:%@;}", @"#my_main_container", hexBackColor];
    NSString *js = [NSString stringWithFormat:@"document.getElementById('my_css').innerHTML='%@'", css];

    [self.webview stringByEvaluatingJavaScriptFromString:js];
}

0 个答案:

没有答案