【问题标题】:Full Screen UIScrollView not working Correctly全屏 UIScrollView 无法正常工作
【发布时间】:2012-06-05 19:37:13
【问题描述】:

我有一个应用程序,例如照片应用程序,其中主视图是 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}

【问题讨论】:

    标签: iphone ios cocoa-touch uiscrollview


    【解决方案1】:

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

    原来UIViewController 有一个automaticallyAdjustsScrollViewInsets 布尔属性。 默认为 true,禁用它会使我的 UIScrollView 填满整个窗口,而不是被向下推。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 祝福你!我只是为此撕毁了我的头发。
      【解决方案3】:

      尝试设置:

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

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

      【讨论】:

      • 我更新了,改变的是 contentOffset 而不是框架。我知道我可以调整 contentOffset 来弥补这一点,但试图找到更好的解决方案。
      • 我认为没有比覆盖导航控制器自动更改的某些值更好的解决方案了。它可以是框架或内容偏移量。您可以为 self.view 使用普通 UIView,然后将 UIScrollView 添加为子视图并使用框架或 contentOffset,但没有像 resizeMyControllersMainView 这样的通用属性将其设置为 NO...
      猜你喜欢
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 2014-04-21
      • 2014-09-17
      • 2012-07-01
      • 1970-01-01
      相关资源
      最近更新 更多