Использование изображений Retina в локальном UIWebView

По какой-то причине я не могу заставить UIWebView "играть хорошо" с моими новыми изображениями Retina. Проблема, шаг за шагом:

Я загружаю серию файлов справки HTML из комплекта. Мой код загружает разные HTML файлы, если iPhone 4 (LWERetinaUtils ниже - это класс утилиты, который я написал). Я прочитал в этом вопросе, что UIWebView не может автоматически определить индикатор @2x - и лично это испытал, следовательно, этот подход.

if ([LWERetinaUtils isRetinaDisplay])
  htmls = [NSArray arrayWithObjects:@"[email protected]",@"[email protected]",nil];
else
  htmls = [NSArray arrayWithObjects:@"foo.html",@"bar.html",nil];

Единственное различие между содержимым [email protected] и foo.html заключается в том, что теги изображений относятся к изображениям с более высоким разрешением.

Затем я загружу свой UIWebView следующим образом:

  _webView = [[UIWebView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 375.0f)];
  _webView.delegate = self;
  [self _loadPageWithBundleFilename:self.filename];
  [self.view addSubview:_webView];

_loadPageWithBundleFilename: - это просто вспомогательный метод, который я написал, чтобы сообщить UIWebView загрузить содержимое из файла.

Пока все хорошо, мой контент загружается по-разному между iPhone Simulator и iPhone 4 Simulator - и не так, как я ожидал.

Текст отображается точно такого же размера - но изображения Retina, по-видимому, масштабируются (они выглядят неровными), и они вылетают с правого края экрана.

Я попробовал:

_webView.scalesPageToFit = YES

и, конечно же, он сделал изображения подходящими (по крайней мере, не пикселированными). Но, тогда мой текст был крошечным (так как я был довольно далеко увеличен с помощью веб-представления).

Кто-нибудь знает, как обойти эту проблему? Я видел несколько решений Javascript (как это), но они, похоже, просто "обмениваются изображениями", что я уже сделал выше - значит, он должен работать, нет?

Наконец, в файлах HTML, вот как я обращаюсь к изображениям:

<img src="[email protected]g" border="0" title="Welcome!" class="title"/>

И CSS:

body{ margin:20pt; padding:10pt; line-height:38pt; font-size:24pt; text-align:left; background-color: transparent; font-family:Helvetica,sanserif; width:640pt;}

Я помещаю тег ширины в CSS - он ничего не меняет.

Ответ 1

Убедитесь, что вы указали высоту и ширину на вашем <img> теги. Для выполнения этой работы вам, безусловно, нужна как минимум ширина.

Ответ 2

Если вы не заботитесь о том, чтобы позволить WebKit обрабатывать изменение размеров (сокращение) изображений на уменьшающейся совокупности устройств, не содержащих сетчатки, вы можете просто сделать это:

  • Просто укажите изображения @2x.
  • Укажите номинальный (не высокий уровень) размер изображения в вашем теге IMG или в свойстве размера фона CSS3.