繁体   English   中英

当我回到它时,UIViewController得到偏移

[英]UIViewController gets offset when I go back to it

我有一个UIViewController ,它有一个UIScrollView作为根视图定义并添加如下

[self.view addSubview:mainScrollView];
UIScrollView *mainScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 64, screenWidth, screenHeight)];

我从NavigationController (20状态栏+ 44导航栏)开始偏移64,直到现在一切正常。 然后我添加另一个ViewController ,当我返回时,mainScrollView在y中偏离导航控制器64点。 为什么会这样?

之前:

在此输入图像描述

后:

在此输入图像描述

当您将UITableView添加到已检查Under Top Bars属性的UIViewController ,可能会看到相同的情况

在此输入图像描述

你可以认为这是一个“黑客”,但尝试取消选中该框,看看它是否解决了你的问题。

如果是,那么应该设置正确的EdgeInset 如果您确实需要/需要它,那么您可以重新启用“在顶部条形图下”。

很可能是由于这些属性的错误组合:

  1. automaticallyAdjustsScrollViewInsets
  2. edgesForExtendedLayout
  3. extendedLayoutIncludesOpaqueBars
  4. 导航栏的半透明度

如果VC的第一个视图或第一个子视图是滚动视图或从中继承的视图(例如tableview),则第一个添加插图。 第二个告诉主视图它是否应该位于“调整”有用的导航栏或标签栏下面。
这里有类似的答案iOS 7 UITextView垂直对齐

您的滚动视图从y = 64开始。 当您在另一个视图控制器上导航时,它可能是y = 64的原因偏移。 Kinjal

很难弄清楚究竟是什么原因。

我会做的是落实viewWillLayoutSubviews的方法UIViewController ,并闯了进去,让您的所有指标self.view和你mainScrollView .documentation 这里

通过这些信息,我们可以找到可能存在的问题。

要么尝试一些东西绕过它或者找到根本原因我也会尝试将mainScrollView设置为the UIViewController视图:

- (void)loadView
{
    [super loadView];
    UIScrollView *mainScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, screenWidth, screenHeight)];
    self.view = mainScrollView;
}

另一种解决方案是在viewWillLayoutSubviews方法中调整mainScrollView的y偏移量:

- (void)viewWillLayoutSubviews
{
    [super viewWillLayoutSubviews];
    self.mainscrollView.frame = self.view.bounds;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM