UIWebView не автоматически изменяет размер, чтобы соответствовать экрану - PullRequest
3 голосов
/ 12 ноября 2010

У меня есть приложение, которое использует 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 автоматически изменяет размеры автоматически, увеличивая размер шрифта текста, а не помещая больше слов в строку.

EDIT:

Это контроллер просмотра статьи:

This is an article view controller

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

ImageViewCOntroller - portrait

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

ImageViewCOntroller - landscape

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

ArticleViewCOntroller - landscape bad

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

ArticleViewCOntroller - landscape good

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

Ответы [ 3 ]

5 голосов
/ 12 ноября 2010

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

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

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

1 голос
/ 19 августа 2012

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

[webView setAutoresizingMask:(UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth)];

1 голос
/ 16 февраля 2011

Вы можете изменить его на стороне сервера, добавив различные стили 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');"]];
}
....

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...