2012-06-05 94 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