Изменение содержимого при загрузке UIWebView внутри ScrollView - PullRequest
0 голосов
/ 11 ноября 2011

Я хочу сделать что-то вроде пульсирующих новостей, когда пользователь читает выбранные новости.

Когда изображение не загружено, пространство для изображения еще не указано.После загрузки изображения размер содержимого также изменяется (текст будет сдвинут вниз, чтобы освободить место для изображения).

Как я могу это сделать?Теперь я использую представление прокрутки с uiwebview внутри него.

- (void)loadView
{
self.view = [[UIView alloc] initWithFrame:CGRectZero];
UIView *thisView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];
contentTitleLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 5, 292, 82)];        
contentThumbnailWebView = [[UIWebView alloc] initWithFrame:CGRectMake(10, CGRectGetMaxY(contentTitleLabel.frame), 292, 0)];

contentDateLabel = [[UILabel alloc]initWithFrame:CGRectMake(10, CGRectGetMaxY(contentThumbnailWebView.frame), 292, 23)];

playVideoButton = [[UIButton alloc] initWithFrame:CGRectMake(CGRectGetMaxX(contentThumbnailWebView.frame)/2, CGRectGetMaxY(contentThumbnailWebView.frame)/2, 72, 37)];
[playVideoButton setTitle:@"Play" forState:UIControlStateNormal];
playVideoButton.hidden = YES;    

contentSummaryLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, CGRectGetMaxY(contentDateLabel.frame), 292, 20)];
contentScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];
contentScrollView.backgroundColor = [UIColor whiteColor];

[thisView addSubview:contentScrollView];

[contentScrollView addSubview:contentDateLabel];
    [contentScrollView addSubview:contentTitleLabel];
[contentScrollView addSubview:contentThumbnailWebView];
[contentScrollView addSubview:playVideoButton];
[contentScrollView addSubview:contentSummaryLabel];
//[self.view addSubview:thisView];   
self.view = thisView;
contentThumbnailWebView.delegate = self;
}

Я прочитал несколько тем по этому поводу, но все еще не могу решить.

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

CGRect frame = aWebView.frame;
frame.size.height = 1;
aWebView.frame = frame;
CGSize fittingSize = [aWebView sizeThatFits:CGSizeZero];
fittingSize.width = aWebView.frame.size.width;
frame.size = fittingSize;
aWebView.frame = frame;

NSLog(@"size: %f, %f", fittingSize.width, fittingSize.height);

[contentDateLabel setFrame:CGRectMake(10, CGRectGetMaxY(aWebView.frame), 292, 23)];
playVideoButton = [[UIButton alloc] initWithFrame:CGRectMake(CGRectGetMaxX(aWebView.frame)/2, CGRectGetMaxY(aWebView.frame)/2, 72, 37)];
[contentSummaryLabel setFrame:CGRectMake(10, CGRectGetMaxY(contentDateLabel.frame), 292, contentSummaryLabel.frame.size.height )];

contentScrollView.contentSize = CGSizeMake(contentScrollView.frame.size.width, CGRectGetMaxX(contentSummaryLabel.frame));            

}

Я загружаю ссылку на изображение в формате jpg.Изображение загружено, но высота изменена неправильно.и я также не могу снова прокрутить scrollView при загрузке веб-просмотра.

Ниже приведен пример вызова изображения для загрузки

- (void) setImageAsThumbnail:(NSString *)imagehumbnailLink
{            
NSURL    *imageURL   = [NSURL URLWithString:imageThumbnailLink];    
NSString *cssString = @"<style type='text/css'>img {width: 292px; height: auto;}</style>";
NSString *myHTMLContent = @"<html><head></head><body><img src='%@'></body></html>";
NSString *htmlString = [NSString stringWithFormat:@"%@%@",cssString,myHTMLContent];
 NSString *imageHTML  = [[NSString alloc] initWithFormat:htmlString, imageURL];    
contentThumbnailWebView.scalesPageToFit = YES;
[contentThumbnailWebView loadHTMLString:imageHTML baseURL:nil];         
}

Спасибо!

1 Ответ

0 голосов
/ 12 мая 2012

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

[webView sizeThatFits:CGSizeZero]

у меня тоже не работает,Вместо этого в вашем webViewDidFinishLoad:(UIWebView*)webView вы можете измерить размер HTML-документа, выполнив фрагмент Javascript:

NSString *js = @"document.getElementById('container').offsetHeight;";
NSString *heightString = [webView stringByEvaluatingJavaScriptFromString:js];
int height = [heightString intValue]; // HTML document height in pixels

В этом примере вы должны назначить идентификатор «контейнер» для верхнего уровняэлемент в вашем HTML (убедитесь, что вокруг него нет полей).Этот подход очень хорошо работает для меня.

...