UIWebView не автоматически подгоняется под размер экрана

У меня есть приложение, которое использует UIViewController для отображения статей в UIWebView, некоторые из которых имеют изображения. Я настроил так, что при нажатии на изображение вызывается

- (void)displayImage:(NSInteger)i {
ImageViewController * imageVC = [[ImageViewController alloc] initWithImageId:i];
[self.navigationController pushViewController:imageVC animated:YES];
[imageVC release];

}

Это загружает другой UIViewController. Все мои взгляды прекрасно реагируют на повороты. ImageViewController поддерживает пропорции изображения, а мой ArticleViewController заполняет экран текстом. Однако всякий раз, когда я поворачиваю экран в ландшафтный режим при просмотре моего ImageViewController и нажимаю кнопку «Назад». Предыдущий UIViewController неправильно автоматически изменял размеры, увеличивая размер шрифта текста, а не помещая больше слов в строку.

РЕДАКТИРОВАТЬ:

Это контроллер представления статьи:

Это контроллер представления статьи

Это ImageViewController, который появляется, когда вы щелкаете изображение:

ImageViewCOntroller — портрет

Теперь, если мы изменим ориентацию здесь...

ImageViewCOntroller — пейзаж

И нажмите кнопку «Назад», содержание статьи было изменено ненадлежащим образом, чтобы соответствовать окну.

ArticleViewCOntroller — плохой пейзаж

Это можно исправить, дважды повернув iPhone. Вот так статья должна выглядеть в альбомной ориентации.

ArticleViewCOntroller — хороший пейзаж

Проблема связана с тем, что размер UIWebView не изменяется должным образом, когда он в данный момент не виден. Что я могу сделать, чтобы исправить это?


person Tozar    schedule 11.11.2010    source источник
comment
вы нашли решение для этого?   -  person Fahim Parkar    schedule 18.05.2013


Ответы (3)


Вам нужно сделать это в Интерфейсном Разработчике.

Нажмите на свой UIWebView и нажмите Apple-3, чтобы открыть «Инспектор размеров».

Убедитесь, что в разделе "Автоматический размер" выбраны две стрелки внутри поля. Это гарантирует, что размер представления всегда будет максимальным для его контейнера.

person Brad    schedule 12.11.2010
comment
Я сделал это, и это работает хорошо, за исключением случая, который я объяснил в своем первоначальном вопросе. Есть еще предложения? - person Tozar; 12.11.2010

Вы можете изменить его на стороне сервера, добавив различные стили css в зависимости от ориентации устройства: например:

/* Landscape */
@media screen and (min-width: 321px)
{   
   body{
     width: 320px;
   }    
}
/* Landscape */
@media screen and (min-width: 321px)
{ 
   body{
     width: 480px;
   }    
}

или вы можете изменить область просмотра со стороны клиента: если на вашей странице есть метатег области просмотра:

<meta name="viewport" id="view" content="width=320px, minimum-scale=1.0, maximum-scale=1.0">

то в вашем коде вы можете менять этот видовой экран каждый раз, когда меняется ориентация:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
if(interfaceOrientation == UIDeviceOrientationLandscapeLeft)      
 [uiwebview stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementById(\"view\").setAttribute('content', 'width=480');"]];
}
....

и измените его снова, когда ориентация портретная

person M Penades    schedule 16.02.2011
comment
Часть вашего решения, связанная с областью просмотра, работала как шарм. Спасибо! - person Mihai Timar; 27.10.2011

Для дальнейшего использования. Вы можете сделать это программно с помощью this.

[webView setAutoresizingMask:(UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth)];

person Keith Smiley    schedule 19.08.2012