У меня есть приложение для электронной почты,
который показывает содержимое в UIWebView
внутри UISplitViewController
.
Все работает нормально, пока я не повернул устройство, когда оно уже увеличилось/уменьшилось в UIWebView
.
При вращении устройства я настраиваю рамку UIWebView
на странице
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
Проблема заключается в том, что когда я увеличил/уменьшил масштаб в UIWebView
и затем повернул устройство.
Содержимое не изменяет размер нового кадра, что приводит к тому, что в контенте будет отображаться серая/черная рамка, или содержимое может быть прокручено по горизонтали.
Дополнительная информация:
UIWebView
является подвью на UIScrollView
, который можно прокручивать.
Когда UIWebView
полностью виден, scrollEnabled
UIScrollView
отключен, а прокрутка UIWebView
.
Над изображением на экране отображается UIWebView
в альбомной ориентации.
Это состояние перед вращением в обоих случаях.
[Не увеличено до поворота] Над изображением показано, что UIWebView
правильно изменяет размер содержимого на новый кадр.
[Увеличение до поворота] Над изображением отображается UIWebView
после изменения пейзажа, а затем поворот на портрет
- > Неверное отображение содержимого
Информация о UIWebView.scrollView
в - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
: <_UIWebViewScrollView: 0xb1322a0; frame = (0 0; 768 960); clipsToBounds = YES; autoresize = H; gestureRecognizers = <NSArray: 0xb1321d0>; layer = <CALayer: 0xb132270>; contentOffset: {0, 0}>
кадр правильный!
Изменить: Решение!
мне удалось решить эту проблему, обновив ширину окна просмотра после поворота устройства CGFloat fll_width = self.view.frame.size.width;
NSString* adsl_javascript_string = [NSString stringWithFormat:@"var setViewPortScript = document.createElement('meta');\
setViewPortScript.setAttribute('name', 'viewport');\
setViewPortScript.setAttribute('content', 'width = %f');\
document.getElementsByTagName('head')[0].appendChild(setViewPortScript);", fll_width];
[adsc_webview stringByEvaluatingJavaScriptFromString:adsl_javascript_string];