2016-09-27 5 views
0

私のアプリには2つのUIWebViewsがあります。どちらも画面全体を占有しますので、一度に1つしか表示されません。 UIWebView Aが表示され、iPadを回転すると、HTMLが正しく表示されます(すべてのメディアクエリとCSSの計算が行われます)。しかし、私がUIWebView Bに切り替えると、HTMLタグは768ではなく512になり、すべてのCSS計算が乱れてしまいます。 UIWebView Bのウィンドウがチェックされ、orientationchangeイベントがトリガーされます(コンソールに書き込んだ直後)。表示されていないときに表示がレンダリングされないようです。何か案が?オリエンテーション変更後にUIWebViewが正しくレンダリングされない

答えて

1

非表示のUIWebViewは正しく表示されません(たとえば、非表示の場合はビューのイメージをキャプチャしようとします)。一度表示されると、ページレイアウトがトリガされ、その時点(現在のフレームサイズ)。

速い推測は、UIWebView.scalesPageToFitを変更しようとしています。私はそれをtrueに設定し、あなたが記述した場合はそれをWFMにします。

複雑な例はhttps://github.com/brave/browser-iosで、UIWebViewsはタブとして隠されています(どのビュー階層でも非表示==)。そのアプリでは、画面の向きを変更して別のタブに切り替え、新しく選択したタブをルートビュー階層に追加して表示し、ウェブページを正しくレイアウトすることができます。

+0

ユーザーがタブを選択すると、新しいUIWebViewが階層にプッシュされます。前のタブはどうなりますか?それは階層から削除されていますか?もしそうなら、ユーザーが元に戻った場合、どのように状態を保持しますか? – oriharel

+1

ユーザーがタブを作成し、新しいUIWebViewを作成してビュー階層に追加します(最初の質問にはいります)。前のタブのUIWebViewはビュー階層から削除されます(次の質問にははい)。前のタブを再度選択すると、そのUIWebViewがビュー階層に再追加されます。 UIWebViewがスーパービューから削除されたときにメモリ内に保持される(すなわち、変数に格納される)限り、状態は保持される。 –

+0

良い計画のように聞こえます。予期せぬ結果を生じさせないために、私はUWebViewのサイズを直前に '修正'していました(viewWillAppear) - 親のサイズが正しいです。 – oriharel

0

viewWillAppearでUIWebViewサイズを修正しました。スーパービューからサイズを取得しました:

UIWebView* webView = (UIWebView*)self.webView; 
[webView setFrame:CGRectMake(0, 0, self.view.superview.frame.size.width, self.view.superview.frame.size.height)]; 
関連する問題