![在此处输入图像说明] [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;
}
答案 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:@" "];
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:@" "];
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
。