2012-09-19 80 views
4

我有這樣的meta標籤:顯示鍵盤後,UIWebView上的scalesPageToFit會斷開嗎?

<meta name="viewport" content="width=768, minimum-scale=1.0, user-scalable=no" /> 

而且我設置scalesPageToFit:

webView.scalesPageToFit = YES; 

起初,這正常工作。當我從縱向到橫向時,它會放大,因此設備的寬度始終爲768px。我可以來回沒有問題(肖像< - >風景)。

只要我啓動虛擬鍵盤,無論是通過contentEditable還是文本區域,即使在關閉鍵盤之後,它都會完全停止工作。

這是UIWebView中的錯誤嗎?還有什麼我需要做的,以使這項工作?有沒有可以使用的解決方法?無論方向如何,寬度必須爲768px。

+0

我確認這仍然是iOS 7中的一個錯誤。解決方法是捕獲鍵盤通知並刷新網絡視圖。一個令人厭惡的黑客,但我迄今爲止所有。 – phatmann

+0

@phatmann您可能可以在運行時通過方法調整來實現我的建議。我在2012年9月提交了一份錯誤報告,但尚未得到答覆。答案有點含糊,已經有一段時間了,但應該讓你繼續下去。重新加載UIWebView對我來說不是一個選項。我現在使用TextKit驅動的UITextView,並且取消了iOS 6的支持。 – Luke

+0

盧克,感謝您的更新。根據您的回答,我不太確定哪些方法可以調整方法,以及更新的方法應該做什麼。你能提供更多信息嗎?另外,你認爲這種混合會導致蘋果拒絕該應用,因爲它會訪問私有方法嗎? – phatmann

回答

1

似乎是蘋果的私人類UIDocumentView的錯誤。由於任何原因,viewportConfigurationsDidChange在鍵盤被激活之後卡住在縮放比例上,這是通過調用_setDocumentScale來設置的。例如,當它應該變爲1.333時,它會陷入1.0。

通過爲UIWebDocumentView編寫一個類別,它是UIDocumentView的一個子類,它沒有實現這些方法(所以你可以調用超類),這是「可修復的」。

儘管我盡了最大努力,但我找不到使用公共API修復此問題的方法。我試圖搞亂UIScrollView的縮放級別,但我永遠無法正常工作。內容將會轉移,其他奇怪的事情將會發生。甚至試過用JavaScript來做。

所以解決它的唯一方法是通過私人類的類別。

這絕不會在應用商店中被批准。

因此,直到蘋果修復此問題,SOL。

0

警告:此解決方案使用私有API。任何使用此代碼的應用程序可能會被應用程序商店拒絕。我張貼它,所以人們至少有一個工作解決方案。

@interface UIWebDocumentView : UIView 
- (void)_setDocumentScale:(float)scale; 
@end 

@interface UIWebView (DocumentView) 
- (UIWebDocumentView *)_documentView; 
@end 

- (void)resetScale:(UIWebView *)webView 
{ 
    UIWebDocumentView *webDocumentView = [webView _documentView]; 
    CGFloat contentWidth = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollWidth;"] floatValue]; 
    CGSize viewSize = webView.bounds.size; 
    float scale = viewSize.width/contentWidth; 
    [webDocumentView _setDocumentScale:scale]; 
} 

呼叫resetScale Web視圖變化的邊界之後。