Подтвердить что ты не робот

Удалить фон градиента из UIWebView?

Как удалить градиент из UIWebView - тот, который вы видите, если вы прокручиваете верхнюю или нижнюю часть. Этот код

webView.backgroundColor = [UIColor whiteColor];

просто изменяет цвет градиента, он не удаляет его. Как это можно сделать?

(обратите внимание: не такой же вопрос, как UIWebView внизу)

4b9b3361

Ответ 1

Ага, да, терминология терпит неудачу. Я бы не назвал эту тень вообще, но c'est la vie. Вот мой безопасный код для достижения эффекта. Подводя итог: это скроет любые изображения с просмотром прокрутки. Он не так уязвим для изменения, как методы (objectAtIndex: 0), поэтому, если Apple переупорядочит дочерние элементы элемента управления webView, он будет работать нормально, но все же полагается на то, что эффект градиента применяется изображениями, ориентированными на свиток view (и что действительно есть scrollview, лежащий в основе веб-представления).

{
    webView.backgroundColor = [UIColor whiteColor];
    for (UIView* subView in [webView subviews])
    {
        if ([subView isKindOfClass:[UIScrollView class]]) {
            for (UIView* shadowView in [subView subviews])
            {
                if ([shadowView isKindOfClass:[UIImageView class]]) {
                    [shadowView setHidden:YES];
                }
            }
        }
    }
}

Ответ 2

Прозрачность UIWebView и удаление свитков.

 webView.opaque = NO;
 webView.backgroundColor = [UIColor clearColor];
 for(UIView *view in webView.subviews){      
      if ([view isKindOfClass:[UIImageView class]]) {
           // to transparent 
           [view removeFromSuperview];
      }
      if ([view isKindOfClass:[UIScrollView class]]) {
           UIScrollView *sView = (UIScrollView *)view;
           for (UIView* shadowView in [sView subviews]){
                //to remove shadow
                if ([shadowView isKindOfClass:[UIImageView class]]) {
                     [shadowView setHidden:YES];
                }
           }
      }
 }

для скрывать индикаторы прокрутки

Ответ 4

Единственный способ, которым я нашел, как это сделать:

for(UIView *aView in [[[webView subviews] objectAtIndex:0] subviews]) { 
        if([aView isKindOfClass:[UIImageView class]]) { aView.hidden = YES; } 
}

Он просто выполняет шаги в подзонах UIWebView и удаляет представление, если это изображение.

Я не помещал это в приложения App Store, поэтому я не знаю, примет ли Apple его.

EDIT: ссылка Брайана содержит более подробную информацию.

Ответ 5

Используя предложенный выше метод, вы не сможете редактировать свой индикатор прокрутки позже. Они также отображаются как UIImageView, поэтому вы должны проверить последний объект:

            UIView* lastView = [[subView subviews] lastObject];
            for (UIView* shadowView in [subView subviews])
            { 
                if(shadowView!=lastView) ... <-this one is a scroll 
            }

Ответ 6

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

// _topCover and _bottomCover are ivar UIViews
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    // with cover views 300pt high, I couldn't scroll far enough to see the shadow,
    // even in portrait on an iPad, which gives you the longest scroll distance
    CGFloat coverage = 300;

    _topCover = [[UIView alloc] initWithFrame:CGRectMake(0, -coverage, webView.bounds.size.width, coverage)];
    _bottomCover = [[UIView alloc] initWithFrame:CGRectMake(0, webView.scrollView.contentSize.height, webView.bounds.size.width, coverage)];
    _topCover.backgroundColor = [UIColor whiteColor];
    _bottomCover.backgroundColor = [UIColor whiteColor];

    // in case the webView is resized, e.g. by rotating the device
    _topCover.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth;
    _bottomCover.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleWidth;

    [webView.scrollView addSubview:_topCover];
    [webView.scrollView addSubview:_bottomCover];
}

Я запускаю его после загрузки страницы, чтобы webView.scrollView.contentSize.height дал мне правильную высоту. Я не уверен, как это будет работать, если ваши страницы динамически меняют высоту. Моя страница загружается только один раз; если ваша перезагрузка, вам нужно будет пропустить запуск alloc/init на _topCover и _bottomCover после первого раза эффективности.

Обновление: Я не уверен, что мое использование autoresizingMask, выше, является достаточным, когда просмотр вращается. Возможно, вам придется поместить это в UIViewController, который содержит ваш UIWebView, чтобы изменить размеры обложек после вращения:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{        
    CGFloat coverage = 300;
    _topCover.frame = CGRectMake(0, -coverage, self.webView.bounds.size.width, coverage);
    _bottomCover.frame = CGRectMake(0, self.webView.scrollView.contentSize.height, self.webView.bounds.size.width, coverage);
}

Ответ 7

Я построил ответ @damithH

@implementation UIWebView (Extensions)

- (void)setBackgroundAndShadowVisible:(BOOL)visible
{
    self.opaque = !visible;
    self.backgroundColor = [self.backgroundColor colorWithAlphaComponent:visible ? 1.0 : 0.0];
    for(UIView *view in [self subviews])
    {
        if([view isKindOfClass:[UIImageView class]])
        {
            view.hidden = !visible;
        }
        if([view isKindOfClass:[UIScrollView class]])
        {
            UIScrollView *scrollView = (UIScrollView *)view;
            for (UIView *shadowView in [scrollView subviews])
            {
                if ([shadowView isKindOfClass:[UIImageView class]])
                {
                    shadowView.hidden = !visible;
                }
            }
        }
    }
}

@end

Ответ 8

if (UIDevice.currentDevice.systemVersion.intValue < 7)
    for (UIImageView *imageView in webView.scrollView.subviews)
        if ([imageView isKindOfClass:[UIImageView class]] && imageView.image.size.width == 1)
            imageView.hidden = YES;