webview剪裁在ios7上

![input图像描述] [1]![我input图片描述] [2] Hy,我已经开发了一个阅读器,显示在一个HTML文件的内容后,使用.css添加水平分页。 一切工作正常,但在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; } 

我认为这是一个CSS问题。 显然,webkit有几个不同的文本裁剪问题,只需要添加  在任何文本行的末尾。 直接在一个词被剪裁后。

你可以尝试修改你的一个html文件来添加  信件被剪辑后,看看是否修复? 如果是这样,我们可以追求写作的JavaScript自动插入  在正确的地方!


编辑:如果它工作使用这个JavaScript代码:

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

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

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

编辑编辑:

要通过正则expression式(忽略HTML <*>脚本标记,在Objective-C中,我相信你会使用这段代码(我不太了解RegEx,所以如果它不工作,我只是打开一个新的问题正则expression式标签关于如何做到这一点,他们可能会在几分钟内得到答案!))。

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

…再次,再次想到,由于它是一种RTL语言,您可能实际上使用了这种代码的变体,它将AFTER(从左到右)放在空间中:

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

我们还在我们的项目中使用了UIWebView作为一些特殊的内容,比如演示文稿和电子书,我会推荐你​​使用viewport来使内容脚成为界限。

很容易谷歌细节,或者你可以看到苹果开发中心文档configuration视口

我真的不知道问题是什么,但也许苹果有一个默认情况下启用剪辑的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的宽度以创buildobjective-c中的边距。 这是否解决了它? (clipToBounds必须保持假,当然哈哈)

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

如果您只呈现格式化的文本和可能的图像,我build议移动到UITextView