2010-06-04 3 views
9

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

The UIWebView помещается как подвид в UIScrollView, наряду с некоторыми другими объектами, которые я хочу UIScrollView для прокрутки вверх и вниз сUIWebView.

Я знаю, что вы можете сделать это с UITextView вроде этого:

CGRect frame = _textView.frame; frame.size.height = _textView.contentSize.height; _textView.frame = frame; 

Но UIWebView не наследуется от UIScrollView и поэтому не содержит contentSize -свойства.

Мне очень хотелось бы оставить его UIWebView, потому что данные, которые я получаю, находятся в HTML-блоках.

Спасибо!

ответ

7

Я думаю, что единственный способ, которым вы сможете это сделать, - использовать некоторый javascript, чтобы получить размер веб-страницы и отрегулировать размер элемента управления UIWebView.

Что-то вроде следующего должен сделать трюк

int content_height = [[theWebView stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"] integerValue]; 
CGRect rect = theWebView.frame; 
rect.size.height = content_height; 
theWebView.frame = rect; 

Вы можете добавить какой-то фактор выдумки на высоту содержимого.

+0

Нет, похоже, это только скрывает UIWebView. Хорошая идея. – Emil

+0

content_height = 0. – Emil

+4

Возможно, вам придется подождать, пока UIWebView завершит загрузку вашего контента, прежде чем вышеуказанный код предоставит вам то, что вы хотите. Я использовал вариацию вышеприведенного кода в некоторых веб-приложениях для изменения встроенных тегов IFRAME. – Daniel

14

На самом деле, не требуется Javascript! В UIView есть хороший способ:

- (CGSize)sizeThatFits:(CGSize)size 

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

Конечно, так как загрузка содержимого в UIWebView в асинхронном, вы должны сделать это после того, WebView загружен, например, в методе UIWebViewDelegate:

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    CGSize size = [webView sizeThatFits: CGSizeMake(1.0f, 1.0f)]; // Pass about any size 
    CGRect frame = webView.frame; 
    frame.size.height = size.height; 
    webView.frame = frame; 
} 

вуаля!

+0

Я не знаю почему, но это не сработало. Сожалею. – Emil

+0

Спецификация: Это сделало вид работы, но не тогда, когда webView содержит изображения, возможно потому, что они не полностью загружены в то время. – Emil

+1

А ... так UIWebView уведомляет о загрузке базового HTML, а не всей страницы. В любом случае, если ваши изображения меняют ваш макет, ваши страницы не совместимы с W3C (должны содержать размер в теге img): p – jv42