Подтвердить что ты не робот

Переход на iOS 7: правильная настройка видового экрана для jQuery/iPhone Webapps, просматриваемых на iPad

У нас есть приложение с по существу одним интерфейсом UIWebView, который установлен в "iPhone App" в XCode.

До сих пор все работало нормально, но с помощью iOS 7 iPad Simulator приложение теперь появляется в полноэкранном режиме, что не будет проблемой, но WebView также будет увеличен.

Я вижу только верхний правый 1/4 загруженного сайта и должен прокручиваться, чтобы увидеть остальные.

Мы используем jQuery mobile 1.3.1 в приложении.

изменить

Я нашел ошибку. Кажется, что семантика метаэлемента viewport изменена между версиями iOS.

Изменение

<meta name="viewport" content="width=device-width, initial-scale=1">

к

<meta name="viewport" content="initial-scale=1">

работал у меня, но я не уверен, что это путь, так как jQuery Mobile Demo Страница устанавливает соединение с устройством. Когда я загружаю Демо-страницу из моего UIWebView, я получаю тот же эффект.

Есть ли какая-либо информация о "правильном пути" для установки области просмотра, тем более, что на демо-странице используется width = device-width

4b9b3361

Ответ 1

В iOS 7 был изменен способ интерпретации метатега vieport. Здесь вы можете найти объяснение https://developer.apple.com/library/ios/releasenotes/General/RN-iOSSDK-7.0/#//apple_ref/doc/uid/TP40013202-CH1-SW75.

Ранее, когда параметры видового экрана были изменены, старые параметры никогда не были отброшены. Это привело к добавлению параметров видового экрана.

Например, если вы начали с width = device-width, а затем изменили до начального уровня = 1.0, вы получили вычисленный width = ширина устройства, начальная шкала = 1.0.

В iOS 7 это было рассмотрено. Теперь вы закончите с вычисленным viewport of initial-scale = 1.0.

Теперь возникает вопрос: как это повлияет на макет на iOS6 < и на устройствах Android?

Ответ 2

У меня было приложение для iPhone, которое только "ломалось" на iPad iOS7. Удаление "width = device-width" из метатега viewport исправлено.

Ответ 3

Я использовал ваш ответ, но он не решает всех моих проблем. Исходный размер остается с шириной ipad вместо iphone.

Также, когда я пытаюсь написать текст, экранное масштабирование будет заполнять текстовое поле, и только когда я нажму, измените размер экрана до его правильного размера iphone.

Мне все еще нужно правильное решение для этого.

Ответ 4

Мой ответ лучший, вы можете попробовать, Должен быть совместим с ios5/ios6/ios7, включая android

код:

<meta content="width=device-width; initial-scale=1.0; minimum-scale=1.0; maximum-scale=2.0" name="viewport" />

iOS7 uiwebview может захотеть изменить высоту:

код:

float version = [[[UIDevice currentDevice] systemVersion] floatValue];

self.webView = [[UIWebView alloc]init];
if (version >= 7.0)
{
    self.webView.frame=CGRectMake(0, 0, rect.size.width, rect.size.height);
}
else
{
    self.webView.frame=CGRectMake(0, 0, rect.size.width, rect.size.height-20);
}

Ответ 5

У меня была такая же проблема с телефонной связью, и удаление ширины устройства не помогло решить проблему.

Мне пришлось модифицировать Classes/MainViewController.m

Я изменил:

- (void)webViewDidFinishLoad:(UIWebView*)theWebView
{
    // Black base color for background matches the native apps
    theWebView.backgroundColor = [UIColor blackColor];

    return [super webViewDidFinishLoad:theWebView];
}

Быть:

- (void)webViewDidFinishLoad:(UIWebView*)theWebView {

    theWebView.backgroundColor = [UIColor blackColor];

    float version = [[[UIDevice currentDevice] systemVersion] floatValue];

    if (version >= 7.0)
    {

        [self.webView stringByEvaluatingJavaScriptFromString:@"$('meta[name=viewport]').attr('content','width=device-width, initial-scale=.42 user-scalable=no');$('body').animate({'opacity':1},300)"];
    }

    return [super webViewDidFinishLoad:theWebView];
}

* ОБНОВЛЕНИЕ *

- (void)webViewDidFinishLoad:(UIWebView*)theWebView
{
    // Black base color for background matches the native apps
    theWebView.backgroundColor = [UIColor blackColor];


    // iPhone app zoom on iPad with iOS 7 fix

    float version = [[[UIDevice currentDevice] systemVersion] floatValue];

    if (version >= 7.0)
    {

        [self.webView stringByEvaluatingJavaScriptFromString:@"if(!(navigator.userAgent.match(/iPhone/i)) && !(navigator.userAgent.match(/iPod/i))) {$('meta[name=viewport]').attr('content','width=device-width, initial-scale=.42 user-scalable=no');}"];
    }

    [self.webView stringByEvaluatingJavaScriptFromString:@"$('body').animate({'opacity':1},300)"];

    return [super webViewDidFinishLoad:theWebView];
}

Я переместил затухание в код за пределами оператора if как < iOS7 останется в непрозрачности 0 в противном случае

* END UPDATE *

Я использовал переменную "version" и оператор if для целевой iOS 7. Спасибо @leetvin

Затем уменьшили масштаб от увеличения в

Первоначально был прыжок между увеличенным в увеличенном масштабе и уменьшенным представлением, поэтому я устанавливал непрозрачность тела в 0 в css и анимировал/исчезал после изменения размера