Фон UIWebView установлен на Clear Color, но он не прозрачный


140

Я разрабатываю приложение iOS 4 с использованием последней версии iOS SDK и XCode 4.2.

У меня есть XIB с микросхемой UIWebViewс альфа = 1,0 , фон набор для Clear Color и Opaque не установлен. На этом XIB я устанавливаю изображение в качестве фона с помощью этого кода:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"AboutBackground.png"]];
        self.view.backgroundColor = background;
        [background release];
    }
    return self;
}

UIWebViewПоказывает статический HTML:

<html><head></head><body style=\"margin:0 auto;text-align:center;background-color: transparent; color:white\">...</body></html>

В симуляторе iOS 5 его фон прозрачный, а на устройстве iOS 4 серый.

Есть подсказка?


попробуйте просто поместить UIImageView в свой веб-просмотр в построителе интерфейса и установить его на свое изображение.
Стас

Спасибо за ответ, но веб-просмотр не занимает весь экран.
VansFannel

Ответы:


361

Также установите:

[webView setBackgroundColor:[UIColor clearColor]];
[webView setOpaque:NO];

3
У меня это работает, только если я установил цвет фона и непрозрачность после вызова loadHTMLString. Похоже, что loadHTMLString сбрасывает оба этих значения.
Джастин Андерсон

1
Я знаю, что вопрос был для iOS, но если для OSX, этот вопрос и ответ решают проблему, а также могут помочь тем, у кого iOS.
Volomike

Это решение все еще работает в iOS 12.1, Xcode 10.1 и Swift.
Bhavin_m


9

Помимо установки прозрачного цвета фона вашего веб-просмотра, также убедитесь, что для непрозрачного установлено значение false.


Спасибо за ответ, но в Интерфейсном Разработчике непрозрачность не установлена.
VansFannel

Попробуйте установить его после вызова [super viewDidLoad: animated]; .
Elegia

Привет, у меня такая же проблема .. работает на ios5, но серый фон на ios4. Как вы ее решили?
user542584 03


3

Вы можете попробовать этот код (я знаю, что это небезопасно, но работает даже для ios5):

- (void)makeBodyBackgroundTransparent {
        for (UIView *subview in [webView subviews]) {
            [subview setOpaque:NO];
            [subview setBackgroundColor:[UIColor clearColor]];
        }
        [webView setOpaque:NO];
        [webView setBackgroundColor:[UIColor clearColor]];
}


3
NSString *content=@"example clear background color UIWebview";
NSString *style=[NSString stringwithformat:@"<html><head><style>body {background-color:transparent;}</style></head><body>%@</body></html>",content];
[myWebview loadhtmlstring:style baseurl:nil];

1

Для цели

webView.opaque = NO;
webView.backgroundColor = [UIColor clearColor];

Не забудьте включить это в свой HTML-код:

<body style="background-color: transparent;">

или

 <body style="background:none">

1

Последняя версия Swift (при необходимости):

lazy var webView: UIWebView = {
    let view = UIWebView()
    view.delegate = self
    view.backgroundColor = .clear
    view.isOpaque = false
    return view
}()

Удалите строку делегата, если не требуется

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.