2016-07-19 3 views
1

Я пытаюсь создать UIWebView с «динамической высотой экрана». Этот веб-просмотр находится внутри UIScrollView, ниже других компонентов. Смотрите расположение (он использует autolayout):UIWebView с динамической высотой внутри UIScrollView в Objective-C

enter image description here

Моей идея заключается в том, чтобы предоставить только один свиток (от UIScrollView - его рабочего) и сделать WebView окно просмотра расти в зависимости от размера контента. И это не работает.

Что я сделал, чтобы попытаться сделать это:

  1. UIWebView свойство «масштаб страницы, чтобы соответствовать» включен;
  2. UIWebView не имеет аналогов;
  3. UIWebView не позволяет взаимодействовать с пользователем.

В моем UIViewController:

Мой UIWebViewDelegate:

- (void)webViewDidFinishLoad:(UIWebView *)webView { 
    CGRect frame = webView.frame; 
    frame.size.height = 1; 
    webView.frame = frame; 
    CGSize fittingSize = [webView sizeThatFits:CGSizeZero]; 
    frame.size = fittingSize; 

    webView.frame = frame; 


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

    _myScrollView.contentSize = webView.bounds.size; 
} 

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

Я тестирую в реальном устройстве.

+0

Динамическая высота I set.But я не установил его Ограничение макета. Я спрашиваю, полезен ли мой код? – user3182143

ответ

4

добавить ограничение высоты для вашего WebView и сделать IBOutlet того, что как

@property(strong, nonatomic) IBOutlet NSLayoutConstraint *webViewHeightConstraint; 

загрузить WebView и в веб-просмотра делегатом

- (void)webViewDidFinishLoad:(UIWebView *)webView 

получить высоту Webview контента и установить webViewHeightConstraint.constant , как показано ниже : -

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

    NSString *str = [webView stringByEvaluatingJavaScriptFromString:@"(document.height !== undefined) ? document.height : document.body.offsetHeight;"]; 
    CGFloat height = str.floatValue; 
    webViewHeightConstraint.constant = height; 

} 

надеюсь, что это ma ты поможешь.

+0

Работает как очарование. Спасибо чувак! – marceloquinta

+0

Просто вы его получили. – user3182143

+0

@ user3182143 Happy Coding! Cheers –

0

Попробуйте установить webView.frame = frame; в viewDidLayoutSubviews()

0

Вы можете получить размер содержимого Webview контента с помощью webView.scrollView.contentSize.height.

и вы можете использовать это webView.scrollView.contentSize.height, чтобы установить contentSize прокрутки в пределах webViewDidFinishLoad.

Как это webViewDidFinishLoad метод

[objWebView setFrame:CGRectMake(objWebView.frame.origin.x, objWebView.frame.origin.y, objWebView.frame.size.width, webView.scrollView.contentSize.height)]; 
if(objWebView.frame.origin.y+objWebView.frame.size.height > objScrollView.contentSize.height) { 
    [objScrollView setContentSize:CGSizeMake(objScrollView.frame.size.width, objWebView.frame.origin.y+objWebView.frame.size.height)]; 
} 
+0

не изменил высоту контента uiwebview. – marceloquinta

0

Для установки динамической высоты для UIWebView, необходимо установить высоту в методе webViewDidFinishLoadView

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    CGFloat height = [[webview stringByEvaluatingJavaScriptFromString:@"document.height"] floatValue]; 
    //For Width 
//CGFloat width = [[webview stringByEvaluatingJavaScriptFromString:@"document.width"] floatValue]; 
CGRect frame = webview1.frame; 
frame.size.height = height; 
//frame.size.width = width; //Width 
webview.frame = frame; 

CGRect screenBounds = [UIScreen mainScreen].bounds ; 
CGFloat widthForIpad = CGRectGetWidth(screenBounds) ; 
CGFloat heightForIpad = CGRectGetHeight(screenBounds) ; 
NSLog(@"The iPad width is - %fl",widthForIpad); 
NSLog(@"The iPad height is - %fl",heightForIpad); 

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 
{ 
    if ([[UIScreen mainScreen] bounds].size.height == 568) 
    scrollView.contentSize = CGSizeMake(320, height+370); //set your required height 
    else 
    scrollView.contentSize = CGSizeMake(320, height+350); //set your required height 
    } 
    else 
    { 
    if ([[UIScreen mainScreen] bounds].size.height == 1024) 
     scrollView.contentSize = CGSizeMake(320, height+370); //For iPad 
    } 
} 
Смежные вопросы