Как динамически менять высоту UIWebView в зависимости от HTML контента?

У меня есть одна простая форма. На ней расположены пару кнопок и UIWebView. Я хочу, чтобы высота UIWebView менялась в зависимости от контента внутри него. Заранее контент неизвестен.

Nib файл выглядит так:
my_nib.png


Мой mainViewController.h:

#import <UIKit/UIKit.h>

@interface ibecViewController : UIViewController <UIWebViewDelegate>
@property (weak, nonatomic) IBOutlet UIWebView *webV;

@end


Я использовал sizeToFit, но это не помогло. Мой mainViewController.m:

#import "ibecViewController.h"

@interface ibecViewController ()

@end

@implementation ibecViewController
@synthesize webV;

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSString *myHTML = @"<html><body><h1>Hello, world!</h1><p>Hello, world</p><p>Hello, world</p><p>Hello, world</p><p>Hello, world</p><p>Hello, world</p><p>Hello, world</p><p>Hello, world</p><p>Hello, world</p><p>Hello, world</p><p>Hello, world</p><p>Hello, world</p></body></html>";
    [webV loadHTMLString:myHTML baseURL:nil];

    [webV sizeToFit];
}

- (void)viewDidUnload
{
    [self setWebV:nil];
    [super viewDidUnload];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

- (void)webViewDidStartLoad:(UIWebView *)webView
{
    NSLog(@"123");
}

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSLog(@"456");
}



И второй вопрос. Почему методы webViewDidStartLoad и webViewDidFinishLoad не работают, хотя я указал, что контроллер соответствует протоколу UIWebViewDelegate?

Я новичок в iOS, так что не судите строго, если допустил глупые ошибки.

Приложение выглядит так:

iphone.png


Видно, что высота UIWebView не поменялась.
  • Вопрос задан
  • 3866 просмотров
Пригласить эксперта
Ответы на вопрос 3
Flanker_4
@Flanker_4
sizeToFit делает немного другие вещи, насколько я понял. Попробуйте через js в методе делегата, сообщающего о окончании загрузки.
stackoverflow.com/questions/3837214/how-to-get-the-content-height-of-a-uiwebview-in-iphone-sdk-objective-c
По второму. Вы, скорей всего, не установили делегат в storyboard. Поищите видео на ютубе, как это делается. Это же можно сделать через код, вставив после [super viewDidLoad];
webV.delegate=self;
Ответ написан
IbrahimKZ
@IbrahimKZ Автор вопроса
Нашел решение. Если вдруг кому понадобиться, то вот оно:
В контроллере надо прописать
- (void)viewWillAppear:(BOOL)animated
{
    [[self webV] setDelegate:self];
}


Тогда методы webViewDidStartLoad и webViewDidFinishLoad заработают. Соответственно, можно будет использовать [webV sizeToFit]; в webViewDidFinishLoad:
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    [webV sizeToFit];
}


Таким образом, размер UIWebView изменяется только после загрузки. А эти методы можно вызвать только если наш контроллер будет соответствовать протоколу UIWebViewDelegate
Ответ написан
Комментировать
@s0L
webV.scrollView.contentSize
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы