我有一个像照片应用程序这样的应用程序,其中主视图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];
}
更新:我注意到它正在发生变化,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}