UIScrollView 在导航和状态栏下方移动

Posted

技术标签:

【中文标题】UIScrollView 在导航和状态栏下方移动【英文标题】:UIScrollView shifts below navigation and status bar 【发布时间】:2010-11-14 14:23:22 【问题描述】:

我有一个包含滚动视图的视图。当视图显示时,图像以全屏 (320x480) 显示,隐藏状态和导航栏。当我点击屏幕时 - 状态和导航栏出现在屏幕上。但是这个东西将 UIScrollView 转移到导航栏下方。我希望状态和导航栏显示在我的滚动视图上。

就像发生在照片应用中一样。在点击图像时,状态和导航栏会显示在滚动视图上。

下面是我如何定位视图


//What I have done in viewDidLoad
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];
self.wantsFullScreenLayout = YES;
scrollView = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
self.view = scrollView;

下面是我在检测单击时所做的事情


- (void)tapDetectingImageView:(TapDetectingImageView *)view             gotSingleTapAtPoint:(CGPoint)tapPoint 
    // single tap hide/unhide the status and nav bar
    NSLog(@"got a single tap");
    if (self.navigationController.navigationBarHidden == NO)
    

        [self.navigationController setNavigationBarHidden:YES animated:NO];
        [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
    
    else
    
        [[UIApplication sharedApplication] setStatusBarHidden:NO animated:YES];
        [self.navigationController setNavigationBarHidden:NO animated:NO];
    

只是给你们的一个指针- 如果我使用

[self.view addSubview:scrollView];
我没有看到这个问题。但这弄乱了我的横向代码。

任何能够阐明我可能做错了什么的人 - 都会有很大的帮助!

【问题讨论】:

【参考方案1】:

在切换导航工具栏时,UIScrollView 内部似乎有一些特殊处理。正如您在问题末尾指出的那样,如果您将滚动视图放在包含 UIView 的内部,则不会发生此重新定位问题。

要解决横向问题,请确保在容器视图和滚动视图上都设置了 autoresizingMask。我不必在我的项目中为横向模式添加任何额外的处理。

【讨论】:

【参考方案2】:

我自己找到了解决方案。 在我的点击检测代码的 else fn 中,我在最后添加以下行。

scrollView.contentOffset = CGPointMake(parentScrollView.contentOffset.x,0);

不确定这是否是正确的方法。但如果有人能提出更好的方法 - 非常欢迎!

【讨论】:

以上是关于UIScrollView 在导航和状态栏下方移动的主要内容,如果未能解决你的问题,请参考以下文章

触摸开始后 UIScrollview 位置移动

移动开发中导航栏和搜索栏在设计中应该注意哪些问题?

iOS 11、状态栏、导航栏和 UIScrollview

iOS7 UIScrollView 在状态栏下方显示偏移内容

如何正确设置 UIScrollView 高度

导航控制器弹出动画时导航栏向上移动