我有一个像照片应用程序的应用程序,主视图是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];
}
更新:我注意到contentOffset
和contentInset
正在发生变化,而不是scrollViews
框架。当条形消失并且UIScrollView
是屏幕的完整大小(应该是)时,contentOffset
和contentInset
如下:
Content Offset: {0, -20}
Content Inset: {20, 0, 44, 0}
当条形图可见并且UIScrollView
被按下时,contentOffset
和contentInset
如下:
Content Offset: {0, -64}
Content Inset: {64, 0, 44, 0}
答案 0 :(得分:5)
在阅读Apple的UI Transition Guide后,我在iOS7上解决了类似的问题: https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/AppearanceCustomization.html
事实证明UIViewController
具有automaticallyAdjustsScrollViewInsets
布尔属性。
默认为true,禁用此选项会使我的UIScrollView
填满整个窗口,而不是被按下。
答案 1 :(得分:3)
我与DTS谈到了这一点,他们说这是设计行为,建议将UIScrollView
附加到父UIView
。
答案 2 :(得分:-1)
尝试设置:
self.view.frame = CGRectMake(0.f, -44.f, 320.f 480.f);
它可能没有您想要的尺寸,但您可以调整它......