2013-10-17 11 views
7

我正在寫一個Phonegap 3.0+應用程序。如何在滑動UIWebView以修復iOS7狀態欄覆蓋問題後更改UIWebView背景色?

沒有與狀態欄在iOS7哪個用戶Ludwig Kristoffersson provided a working answer here

現在,我有一個UIWebView一個20像素的頂邊,我怎樣才能改變UIWebView的背景顏色重疊的看法的問題嗎?我需要狀態欄後面的區域與「人員」工具欄的背景顏色相同。

enter image description here

我的目標C幾乎沒有任何經驗,並一直在尋找通過可能的SO問題找到一個有效的解決方案,但沒有成功。

UIWebView background color
UIWebView background is set to Clear Color, but it is not transparent


下面是我試過到目前爲止代碼:

- (void)viewWillAppear:(BOOL)animated { 
    //Lower screen 20px on ios 7 
    if([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) { 
     CGRect viewBounds = [self.webView bounds]; 
     viewBounds.origin.y = 20; 
     viewBounds.size.height = viewBounds.size.height - 20; 
     self.webView.frame = viewBounds; 
     [self.webView setOpaque:YES]; 

     //neither of these seem to work when uncommented: 
    // [self.webView setBackgroundColor:[UIColor grayColor]]; 
    // self.webView.backgroundColor=[UIColor grayColor]; 
     } 
    [super viewWillAppear:animated]; 
    } 



更新1

- (void)viewWillAppear:(BOOL)animated 
{ 
//Lower screen 20px on ios 7 
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) { 
    CGRect viewBounds = [self.webView bounds]; 
    viewBounds.origin.y = 20; 
    viewBounds.size.height = viewBounds.size.height - 20; 
    self.webView.frame = viewBounds; 

    self.webView.backgroundColor = [UIColor grayColor]; 
    self.webView.opaque=NO; 
} 
[super viewWillAppear:animated]; 
} 

這似乎仍然給我一個白色背景後面的狀態欄,而不是灰色。

我希望的結果是這樣的: enter image description here

回答

10

所以我意識到代碼將UIWebView向下推動20px。這意味着根據定義,空白區域不能是UIWebView。白色空間是我通過以下操作改變背景顏色的主視圖:

1.轉到MainViewController.xib:



2.選擇主視圖:


3.顯示屬性檢查器並更改顏色。完成。

顯而易見,現在我想到了它,但希望這有助於未來的人。

14

更改不透明屬性NO和檢查是這樣的:

self.webView.backgroundColor = [UIColor grayColor]; 
self.webView.opaque=NO; 

其工作對我罰款。

+0

請看我上面的「更新1」 – Paul

+0

更改顏色和檢查/ – Ganapathy

+0

答案更新更改顏色並檢查一次。 – Ganapathy

0

或者,在UIWebView內部HTML的主體上設置20px的邊距,然後在CSS中設置的背景顏色將一直到頂部。

function onDeviceReady() { 
    if (parseFloat(window.device.version) === 7.0) { 
      document.body.style.marginTop = "20px"; 
    } 
} 

document.addEventListener('deviceready', onDeviceReady, false); 

請注意,您的應用將需要添加設備插件才能正常工作。

+1

感謝Sam。那是我最初使用的。我的一些觀點(可滾動,textareas也滾動)的性質意味着額外的身體邊緣有時會滑落。我嘗試設置overflow-y隱藏,但仍然無法繞過它。欣賞輸入雖然。 – Paul

1

這是通過CSS工作科爾多瓦3和科爾多瓦2.9

等你以後設置你的應用程序的背景色是這樣的:

body{ 
    background-color: #000; 
} 

轉到您的CordovaXlib.xcode.proj,查看您的「類」文件夾 MainViewController.m 線#142

取消對 「webViewDidStartLoad」 方法或功能,只是增加

self.webView.opaque=NO; 

所以,你有這樣的事情:

- (void) webViewDidStartLoad:(UIWebView*)theWebView 
{ 
    self.webView.opaque=NO; 
    return [super webViewDidStartLoad:theWebView]; 
} 
0

添加以下CSS定義:

#ios7statusbar { 
    width:100%; 
    height:20px; 
    background-color:white; 
    position:fixed; 
    z-index:10000; 
} 
.ios7 .ui-page, .ios7 .ui-header, .ios7 .ui-pane { 
    margin-top: 20px; 
} 

添加一個基於JavaScript的用戶代理檢測到您的應用程序初始化:

if (navigator.userAgent.match(/(iPad.*|iPhone.*|iPod.*);.*CPU.*OS 7_\d/i)) { 
    $("body").addClass("ios7"); 
} 
1

科爾多瓦3.5設置背景顏色MainViewCo ntroller.m(void)webViewDidFinishLoad:(UIWebView*)theWebView

theWebView.backgroundColor = [UIColor blackColor]; 

更改或註釋掉該行成功地讓我改變web視圖背後的iOS屏幕的顏色。

感謝bar54來描述此解決方案。