5

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

我在将UIViewControllers主视图设置为 aUIScrollView并让它占据屏幕的整个长度时遇到问题。问题是,当显示导航栏和状态栏时,导航栏和状态栏UIScrollView的高度会被向下推(它不会像想象的那样在它们下方)。当用户点击屏幕并且导航/状态栏消失时,它会自行重置以占据屏幕的整个长度,就像它假设的那样。

将主视图设置为 a 并在其顶部UIView附加 a的简单解决方法是可行的。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}
4

3 回答 3

5

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

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

于 2013-10-30T11:34:29.447 回答
3

我就此与 DTS 进行了交谈,他们说这是设计行为并建议将其附加UIScrollView到 parent UIView

于 2012-06-06T22:07:19.160 回答
-1

尝试设置:

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

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

于 2012-06-05T19:57:36.540 回答