全屏UIScrollView无法正常工作

Ser*_*nce 5 iphone cocoa-touch uiscrollview ios

我有一个应用程序,如照片应用程序,其中主视图UIScrollView占据了屏幕的全部大小.此外,与照片应用程序一样,当用户点击屏幕时,会有半透明的导航,状态和工具栏重新出现/消失.

我将UIViewControllers主视图设置为a UIScrollView并占用屏幕的全长时出现问题.问题在于,当显示导航和状态栏时,UIScrollView按下导航和状态栏的高度(它不会像它假设的那样在它们下面).当用户点击屏幕并且导航/状态栏消失时,它会自行重置以占据屏幕的全长,就像它想象的那样.

将主视图设置为a 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];
}
Run Code Online (Sandbox Code Playgroud)

更新:我注意到它的contentOffsetcontentInset正在改变,而不是scrollViews框架.当杆已经消失,UIScrollView在屏幕的全尺寸(因为它应该是),则contentOffsetcontentInset如下:

Content Offset: {0, -20}
Content Inset: {20, 0, 44, 0}
Run Code Online (Sandbox Code Playgroud)

当酒吧是可见的,并且UIScrollView被按下时,contentOffsetcontentInset如下:

Content Offset: {0, -64}
Content Inset: {64, 0, 44, 0}
Run Code Online (Sandbox Code Playgroud)

Ron*_*ald 5

在阅读Apple的UI过渡指南后,我在iOS7上解决了类似的问题:https: //developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/AppearanceCustomization.html

事实证明它UIViewController有一个automaticallyAdjustsScrollViewInsets布尔属性.默认为true,禁用此选项会使我UIScrollView填满整个窗口,而不是被按下.


Ser*_*nce 3

我与 DTS 讨论了这个问题,他们说这是设计的行为并建议将 附加UIScrollView到父级UIView