Удалить или изменить цвет рамки вокруг отображения документа UIWebView? - PullRequest
4 голосов
/ 13 августа 2011

Я использую UIWebView для отображения различных типов файлов (поэтому я не могу использовать специализированный просмотрщик PDF), встроенных в мой основной вид (поэтому я не могу использовать модальный контроллер взаимодействия с документами). Мой основной вид имеет фоновый дизайн, который конфликтует со светло-серой рамкой, которая появляется вокруг документов в UIWebView. Кто-нибудь знает способ удалить эту серую рамку, сделать ее прозрачной или изменить ее цвет?

Я знаком с и использовал методы для изменения цвета фона UIWebView, чтобы избежать «цветовой вспышки» во время загрузки, и для удаления верхней и нижней частей. тень , которая появляется при "прокрутке" веб-вида, но я не видел, чтобы кто-то обращался к этой серой рамке. (Он отображается только при отображении документов, таких как .doc или .pdf, а не при отображении содержимого HTML.) Я скрыл все изображения, которые являются подпредставлениями представления прокрутки UIWebView's, поэтому, очевидно, это происходит откуда-то еще.

Ответы [ 6 ]

2 голосов
/ 31 октября 2012

Этот вопрос был написан, когда iOS 4 была текущей, но в iOS 5 и более поздних, просто установив backgroundColor и непрозрачные свойства UIWebView, удалит эту серую рамку:

myWebView.opaque = NO;
myWebView.backgroundColor = [UIColor clearColor];
0 голосов
/ 29 октября 2012

Попробуйте это,

self.webview.backgroundColor = [UIColor whiteColor];

for (UIView* subView in [self.webview subviews])
{
    if ([subView isKindOfClass:[UIScrollView class]]) {
        for (UIView* shadowView in [subView subviews])
        {
            if ([shadowView isKindOfClass:[UIImageView class]]) {
                [shadowView setHidden:YES];
            }
        }
    }
}

Это может вам помочь. : -)

0 голосов
/ 24 октября 2012

Похоже, что невозможно удалить границу из UIWebView, но вы не можете использовать CGContextDrawPDFPage(), как Apple показывает здесь: http://developer.apple.com/library/ios/#samplecode/ZoomingPDFViewer/Introduction/Intro.html

0 голосов
/ 24 октября 2012

Вам нужна куча волшебства CoreAnimation:

- (void) hideShadowInLayer:(CALayer *) layer
{
    for (CALayer *l in layer.sublayers) {
        l.shadowOpacity = 0;
        [self hideShadowInLayer:l];
    }
}

- (void) hideShadows
{
    [CATransaction begin];
    [CATransaction setValue:(id) kCFBooleanTrue forKey:kCATransactionDisableActions];
    [self hideShadowInLayer:webView.layer];
    [CATransaction commit];
}

Вам нужно выполнить метод hideShadows где-нибудь ПОСЛЕ загрузки документа и пока вы прокручиваете его (я думаю, scrollViewDidScroll из webView.scrollView.delegate - хорошее место). Вам также необходимо включить QuartzCore framework в ваш проект.

Что здесь происходит:

В любом представлении для визуализации используется нечто, называемое layer. Слои могут иметь свою собственную иерархию, и каждый слой может иметь свою собственную границу и тень, поэтому раздражающий вас кадр является тенью одного из них. Плохая вещь - UIWebView воссоздает его во время прокрутки - поэтому вам нужно постоянно использовать этот метод. И я думаю, что shadowOpacity имеет прикрепленную к нему анимацию по умолчанию, поэтому вам нужно CATransaction, чтобы отключить ее.

0 голосов
/ 24 октября 2012

Поскольку это уже давно, я просто добавлю несколько идей.

Возможно, вы сможете использовать stringByEvaluatingJavaScriptFromString: метод UIWebView класс для управления объектной моделью документа, если UIWebView обрабатывает загруженный документ как страницу, но у этого метода есть некоторые ограничения.

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

0 голосов
/ 13 августа 2011

Вы можете изменить цвет фона WebView, назначив его backgroundColor свойство:

myWebView.backgroundColor = [UIColor redColor]; // will make red bakground

Если вы хотите прозрачность, используйте [UIColor clearColor].Но помните - делая ваши взгляды прозрачными, вы можете ухудшить производительность приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...