Objective-C - Отримання динамічного розміру UIWebView після високоякісного модифікації вмісту документа

Я динамічно змінюючи розмір мого UIWebView залежно від вмісту в ньому. Якщо є багато вмісту, воно може охоплювати висоту інтерфейсу UIWebView до 1000 пікселів, а якщо вміст менший, він може становити до 500 пікселів (таким чином, UIWebView буде мати довільну висоту від 0-n px). Код, який я використовую для визначення висоти UIWebView після завантаження документа, це:

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

   //Change the height dynamically of the UIWebView to match the html content
    CGRect webViewFrame = webView.frame;
    webViewFrame.size.height = 1;
    webView.frame = webViewFrame;
    CGSize fittingSize = [webView sizeThatFits:CGSizeZero];
    webViewFrame.size = fittingSize;
    webViewFrame.size.width = 276;//Making sure that the webView doesn't get wider than 276 px
    webView.frame = webViewFrame;

    float webViewHeight = webView.frame.size.height;
}

Це чудово працює. Але щоб додати до складності я використовую JavaScript (jquery), щоб перевірити, чи є зображення в документі ширшим ніж 276 пікселів (ширина мого UIWebView).

IF there is an image that is wider I add a class to the img tag named "oversized" and have a CSS rule that will scale the image properly so it will not be wider than 276 pixels. Since the JavaScript runs after the document has finished loading I can not longer "catch" the UIWebView height. How can I get the new document height after the JavaScript has been run?

Використовуваний яваскрипт виглядає так:

<script type='text/javascript' src='http://code.jquery.com/jquery-1.4.2.js'></script>                            
<script type='text/javascript'>
 276) { 
                $(this).parent().addClass('oversized');
            } 
         }); 
    }); 
}); 
//]]>

</script>

І CSS:

.oversized * { 
    border: 2px solid red;
    width: 100%;
    height: auto;
}
1

1 Відповіді

У вашому методі -webViewDidFinishLoad: ви можете спробувати додати

NSString *height = [webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight;"];

Крім того, замість того, щоб використовувати jQuery, щоб спробувати знайти великі зображення - у вашому CSS просто змініть ширину: 100% на 'max-width: 100%' і встановіть його для всіх зображень:

img { 
    border: 2px solid red;
    max-width: 100%;
    height: auto;
    -webkit-box-sizing: border-box;
}

Правило розміщення коробки гарантує, що кордони не додають додаткових пікселів до ширини.

0
додано
ІТ КПІ - JavaScript
ІТ КПІ - JavaScript
504 учасників

співтовариство javascript розробників в Telegram