webview剪辑在ios7上

时间:2014-02-14 11:40:54

标签: ios ios7 uiwebview paging

![在此处输入图像说明] [1]![在此处输入图像说明] [2] Hy,我开发了一个阅读器,在使用.css添加水平分页后,在webview上显示html文件的内容。 一切都运行正常,但在ios7上,我注意到webview在左边缘被剪裁了 我尝试过以下方法:

readingWebView.frame = CGRectMake(0, 0, 768, 920);   
[readingWebView loadHTMLString:loadString baseURL:nil];
readingWebView.autoresizingMask = UIViewAutoresizingFlexibleHeight |        UIViewAutoresizingFlexibleWidth;
readingWebView.clipsToBounds = false;
self.edgesForExtendedLayout=UIRectEdgeNone;
self.extendedLayoutIncludesOpaqueBars=NO;
self.automaticallyAdjustsScrollViewInsets = NO;

这是我的css文件:

html {
height:820px;
//margin:0px;
font-size:24px;
width:628px;
}

body {
margin:0px;
    padding:0px;
    width:628px;

}

#viewer {
    width:628px;
    height:820px;

}

#book {
width:628px;
height:820px;

margin-left:50px;
margin-right:50px;
//margin-top:100px;

-webkit-column-count:auto;
-webkit-column-width:668px;
-webkit-column-gap:140px;
text-align:justify;

 }

.h {
margin-top:8px;
 }

4 个答案:

答案 0 :(得分:2)

我认为这是一个CSS问题。显然webkit有一些不同的文本剪辑问题,可以通过在任何文本行的末尾添加 来解决。在剪辑了一个单词之后。

您可以尝试修改一个html文件,在剪切字母后添加 并查看是否修复了它?如果是这样,我们可以继续编写javascript,自动在正确的位置插入 


编辑:如果确实有效,请使用以下javascript代码:

var bodyText = "هذا هو بلدي النص الأساسي.";
var newBodyText = bodyText.replace(" ","  ");

第二个想法,既然你是一个RTL字符串,你可能需要使用它,不知道string.replace函数如何处理RTL

var bodyText = "هذا هو بلدي النص الأساسي.";
var newBodyText = bodyText.replace(" ","  ");

编辑编辑:

要通过RegEx执行此操作(忽略HTML< *>脚本标记,在Objective-C中我相信您会使用此代码(我对RegEx知之甚少,所以如果它不起作用我会打开一个关于如何执行此操作的RegEx标记的新问题,他们可以在几分钟内得到答案!))。

NSString *string = originalHTMLString;

NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(?i)(<script(?:[^>\"']|\"[^\"]*\"]|'[^']*')*>)\s+</script\\s*>|<style(?:[^>\"']|\"[^\"]*\"]|'[^']*')*>)\s+</style\\s*>|<textarea(?:[^>\"']|\"[^\"]*\"]|'[^']*')*>)\s+</textarea\\s*>|</?[a-z](?:[^>\"']|\"[^\"]*\"]|'[^']*')*>|\\S+)|\\s+" options:NSRegularExpressionCaseInsensitive error:&error];
NSString *modifiedString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@"&nbsp; "];

finalHTMLString = modifiedString;

...再次,第二个想法,因为它是一种RTL语言,你实际上可能会使用这种代码的变体,它将空间(从左到右)放在空间中:

NSString *string = originalHTMLString;

NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(?i)(<script(?:[^>\"']|\"[^\"]*\"]|'[^']*')*>)\s+</script\\s*>|<style(?:[^>\"']|\"[^\"]*\"]|'[^']*')*>)\s+</style\\s*>|<textarea(?:[^>\"']|\"[^\"]*\"]|'[^']*')*>)\s+</textarea\\s*>|</?[a-z](?:[^>\"']|\"[^\"]*\"]|'[^']*')*>|\\S+)|\\s+" options:NSRegularExpressionCaseInsensitive error:&error];
NSString *modifiedString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@" &nbsp;"];

finalHTMLString = modifiedString;

答案 1 :(得分:1)

我们还在项目中使用UIWebView作为演示文稿和电子书等特殊内容,我建议您使用viewport使内容符合界限。

很容易谷歌的详细信息,或者你可以在苹果开发中心Configuring the Viewport

上看到文档

答案 2 :(得分:1)

我真的不知道问题是什么,但也许Apple在webViewDelegate中有一个默认启用剪辑的视图?你能试试这个:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    NSLog(@"Adjusting SubView Clippings");//<-- Wait until this logs otherwise this code hasn't been called yet, even if webView looks like it's been displayed!
    for (UIView *view in [webView subViews]) {
        view.clipsToBounds = NO;
    }
}

而且我也看不到你的整个项目文件,但看看是否有效:
view.superview.clipsToBounds = NO;

另外,也许UIWebView解释CSS margin标签的方式是罪魁祸首?您是否尝试在没有左右边距的情况下加载页面,然后缩小UIWebView的宽度以在objective-c中创建边距。这样可以解决吗? (clipToBounds必须保持为false,当然是哈哈)

答案 3 :(得分:1)

这是WebKit中的已知错误。它发生在所有RTL语言中。对于我们的应用程序,当我们的元标记视口不够宽以捕获整个RTL元素时会发生这种情况。

如果您只展示带格式的文字和可能的图片,我建议您转到UITextView