Iphone: добавление нижнего колонтитула в нижней части UIWebView - PullRequest
0 голосов
/ 16 сентября 2011

Я пытаюсь добавить кнопку UIB внизу веб-вида. Каков будет лучший способ сделать это?

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

Ответы [ 4 ]

1 голос
/ 15 июля 2015

Используйте этот код для добавления кнопки внизу веб-просмотра.

CGSize size = webView.scrollView.contentSize;

button.frame = CGRectMake(button.frame.origin.x, size.height, button.frame.size.width, button.frame.size.height);
[webView.scrollView addSubview:button];
[webView.scrollView setContentSize:CGSizeMake(size.width, size.height + button.frame.size.height)];
1 голос
/ 18 августа 2013

Я нашел решение, используя KVO на webView.scrollView.contentSize.

Я писал об этом здесь http://objectivesea.tumblr.com/post/58540464993/adding-a-footer-to-uiwebview и весь необходимый код можно найти в этом коммите: https://github.com/coryalder/DMAFWebViewController/commit/07032756f3e72f62f86b077319c44d3f5d7cab6d

По сути, вы просматриваете contentSize на предмет изменений, а когда он меняется, вы увеличиваете contentSize на footerView.height и устанавливаете фрейм в footerView, чтобы разместить его в нижней части scrollView.Обратите внимание, что это означает, что вы должны следить за рекурсивными вызовами contentSize.Я делаю это, записывая целевой contentSize как ассоциированный объект (objc_setAssociatedObject), но вы также можете легко сохранить его как свойство.

1 голос
/ 16 сентября 2011

Создать UIView, добавить UIWebView и UIButton в качестве своих подпредставлений:

  • UIView
    • UIWebView
    • UIButton
0 голосов
/ 27 ноября 2011

Если вы хотите, чтобы нижний колонтитул следовал содержимому веб-представления, вы должны использовать UIScrollViewDelegate.

Есть несколько хитростей.

  1. Получите UIScrollView в UIWebView.Теперь в iOS5 это очень просто.
  2. Установите делегат UIScrollView своему делегату.
  3. Ваш делегат должен передать все сообщения из UIScrollViewDelegate в UIWebView.
  4. Изменитьположение нижнего колонтитула в соответствии с contentOffset в UIScrollView
  5. Восстановление значения делегата при освобождении UIWebView

Вы можете добавить следующий код для передачи сообщения из UIScrollViewDelegate

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
        // layout your footer here
    [self layoutAccessoryViews:scrollView];
    if( [scrollViewPassthrough_ respondsToSelector:@selector(scrollViewDidScroll:)] ) {
        [scrollViewPassthrough_ scrollViewDidScroll:scrollView];
    }
}
                                             // any offset changes
- (void)scrollViewDidZoom:(UIScrollView *)scrollView {

    if( [scrollViewPassthrough_ respondsToSelector:@selector(scrollViewDidZoom:)] ) {
        [scrollViewPassthrough_ scrollViewDidZoom:scrollView];
    }
}

// called on start of dragging (may require some time and or distance to move)
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {

    if( [scrollViewPassthrough_ respondsToSelector:@selector(scrollViewWillBeginDragging:)] ) {
        [scrollViewPassthrough_ scrollViewWillBeginDragging:scrollView];
    }
}

// called on finger up if the user dragged. velocity is in points/second. targetContentOffset may be changed to adjust where the scroll view comes to rest. not called when pagingEnabled is YES
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {

    if( [scrollViewPassthrough_ respondsToSelector:@selector(scrollViewWillEndDragging:withVelocity:targetContentOffset:)] ) {
        [scrollViewPassthrough_ scrollViewWillEndDragging:scrollView withVelocity:velocity targetContentOffset:targetContentOffset];
    }
}

// called on finger up if the user dragged. decelerate is true if it will continue moving afterwards
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {

    if( [scrollViewPassthrough_ respondsToSelector:@selector(scrollViewDidEndDragging:willDecelerate:)] ) {
        [scrollViewPassthrough_ scrollViewDidEndDragging:scrollView willDecelerate:decelerate];
    }
}

- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {

    if( [scrollViewPassthrough_ respondsToSelector:@selector(scrollViewWillBeginDecelerating:)] ) {
        [scrollViewPassthrough_ scrollViewWillBeginDecelerating:scrollView];
    }
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {

    if( [scrollViewPassthrough_ respondsToSelector:@selector(scrollViewDidEndDecelerating:)] ) {
        [scrollViewPassthrough_ scrollViewDidEndDecelerating:scrollView];
    }
}

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {

    if( [scrollViewPassthrough_ respondsToSelector:@selector(scrollViewDidEndScrollingAnimation:)] ) {
        [self scrollViewDidEndScrollingAnimation:scrollView];
    }
}

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {

    if( [scrollViewPassthrough_ respondsToSelector:@selector(viewForZoomingInScrollView:)] ) {
        return [scrollViewPassthrough_ viewForZoomingInScrollView:scrollView];
    }
    return nil;
}

- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view {

    if( [scrollViewPassthrough_ respondsToSelector:@selector(scrollViewWillBeginZooming:withView:)] ) {
        [scrollViewPassthrough_ scrollViewWillBeginZooming:scrollView withView:view];
    }
}

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale {

    if( [scrollViewPassthrough_ respondsToSelector:@selector(scrollViewDidEndZooming:withView:atScale:)] ) {
        [scrollViewPassthrough_ scrollViewDidEndZooming:scrollView withView:view atScale:scale];
    }
}

- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView {

    if( [scrollViewPassthrough_ respondsToSelector:@selector(scrollViewShouldScrollToTop:)] ) {
        [scrollViewPassthrough_ scrollViewShouldScrollToTop:scrollView];
    }
    return YES;
}

- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView {

    [self layoutAccessoryViews:scrollView];
    if( [scrollViewPassthrough_ respondsToSelector:@selector(scrollViewDidScrollToTop:)] ) {
        [scrollViewPassthrough_ respondsToSelector:@selector(scrollViewDidScrollToTop:)];
    }
}
...