2012-06-05 92 views
5

我有一個像照片應用程序的應用程序,其中主視圖是UIScrollView,它佔用了屏幕的全尺寸。此外,與照片應用程序一樣,當用戶點擊屏幕時,會有半透明的導航,狀態和工具欄重新出現/消失。全屏UIScrollView無法正常工作

我有一個問題,將UIViewControllers主視圖設置爲UIScrollView並佔用屏幕的全長。問題是,當顯示導航和狀態欄時,UIScrollView被導航和狀態欄的高度推下(它不會像它所想的那樣放在它們下面)。當用戶點擊屏幕並且導航/狀態欄消失時,它會自行重置以佔據屏幕的整個長度,就像它假設的那樣。

將主視圖設置爲UIView並在其上附加UIScrollView即可工作。但是,我想嘗試使這個工作沒有任何解決方法(即調整UIScrollViews contentInset等),因爲理論上它應該工作。

下面是我執行的代碼:

- (void)loadView 
{ 

    self.wantsFullScreenLayout = YES; 

    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame: CGRectMake(0,0,320,480)]; 
    scrollView.contentSize = CGSizeMake(320, 480); 
    scrollView.scrollEnabled = NO; 
    scrollView.contentOffset = CGPointZero; 
    scrollView.bounces = NO; 
    self.view = scrollView; 
    [scrollView release]; 

} 

- (void) viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    self.navigationController.navigationBar.translucent = YES; 
    [[UIApplication sharedApplication] setStatusBarStyle: UIStatusBarStyleBlackTranslucent animated: NO]; 
    self.navigationController.toolbarHidden = NO; 
    self.navigationController.toolbar.barStyle = UIBarStyleBlack; 
    self.navigationController.toolbar.translucent = YES; 

    [self startTimer]; 
} 

- (void) viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 

    self.navigationController.navigationBar.translucent = NO; 
    [[UIApplication sharedApplication] setStatusBarStyle: UIStatusBarStyleDefault animated: NO]; 

    [self cancelTimer]; 
} 

更新:我注意到它的contentOffsetcontentInset正在改變,而不是scrollViews框架。當杆已經消失,UIScrollView是屏幕的全尺寸(因爲它應該是),則contentOffsetcontentInset如下:

Content Offset: {0, -20} 
Content Inset: {20, 0, 44, 0} 

當酒吧是可見的,並且UIScrollView被按下時, contentOffsetcontentInset如下:

Content Offset: {0, -64} 
Content Inset: {64, 0, 44, 0} 

回答

3

我與DTS談到此事,他們說這是設計的行爲,並建議將UIScrollView附加到父母UIView

+0

祝福你!我只是把我的頭髮拉出來。 –

-1

儘量被設置:

self.view.frame = CGRectMake(0.f, -44.f, 320.f 480.f); 

它可能不是你想要的大小,但你可以調整它...

+0

我更新了,它是不改變框架的contentOffset。我知道我可以調整contentOffset來彌補這一點,但試圖找到更好的解決方案。 –

+0

我不認爲有比覆蓋導航控制器自動更改的某些值更好的解決方案。這將是框架或內容偏移量。你可以爲self.view創建一個普通的UIView,然後添加UIScrollView作爲子視圖並且使用frame或者contentOffset,但是沒有像'resizeMyControllersMainView'這樣的通用屬性來將它設置爲NO。 – graver