Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么UIPageViewController中UITableView的内容插入在交互之后会变得凌乱?_Ios_Objective C_Uitableview_Uipageviewcontroller_Uicontainerview - Fatal编程技术网

Ios 为什么UIPageViewController中UITableView的内容插入在交互之后会变得凌乱?

Ios 为什么UIPageViewController中UITableView的内容插入在交互之后会变得凌乱?,ios,objective-c,uitableview,uipageviewcontroller,uicontainerview,Ios,Objective C,Uitableview,Uipageviewcontroller,Uicontainerview,我创建了一个基于页面的应用程序,并对其进行了一些黑客攻击以进行一些实验;我的简单目标是拥有一个UIPageViewController,其页面将包含一个持有UITableView的UIViewController(进一步检查后,如果我改用UITableViewController,我的实验结果是相同的)。 为此,我只需编辑项目模板,并使用Storyboard的ContainerView对象将UIPageViewController添加为RootViewController的嵌入式视图,如您在本屏

我创建了一个基于页面的应用程序,并对其进行了一些黑客攻击以进行一些实验;我的简单目标是拥有一个UIPageViewController,其页面将包含一个持有UITableView的UIViewController(进一步检查后,如果我改用UITableViewController,我的实验结果是相同的)。 为此,我只需编辑项目模板,并使用Storyboard的ContainerView对象将UIPageViewController添加为RootViewController的嵌入式视图,如您在本屏幕截图中所示:

每个控制器都通过故事板配置为自动调整scroll view的内容插入,如果我使用此配置启动项目,一切看起来都很好,DataViewController的tableview的内容插入按预期在导航栏的正下方进行了适当调整;但是,当用户与tableview进行交互时,内容插入将中断,tableview将位于导航栏下方:

我已经能够通过在DataViewController的viewDidLayoutSubview方法中手动设置内容插入,并通过在任何控制器上禁用调整滚动视图插入来修复此问题,因此我不需要将此作为解决问题的答案。 我的问题是,为什么在第一次从故事板加载第一个控制器之后,内容插入被正确设置,以及为什么在任何类型的用户交互之后,内容插入会中断


如果您需要直接测试,它是指向项目的链接

您是否尝试过修复情节提要中根视图控制器的容器视图中的自动布局约束(即,顶部空间约束应设置为与顶部布局指南相关,而不是与Superview相关,常数为0)?
您只会失去在导航栏下滚动表格视图的效果

我不能100%确定这是您遇到的问题,但以下是有关您的设置的一些说明:

默认情况下,
UIViewController
s倾向于配置为在非不透明条后扩展其内容,并调整滚动视图插入。在上面的设置中,这意味着容器VC:

  • 扩展其内容以显示在导航栏后面
  • 将其scrollview的
    .contentInset
    .ScrollIndicationSet
    设置为与导航栏相同的高度
“但是,啊!”我听到你说,“那个容器视图控制器没有滚动视图”。这是一个棘手的问题:

看起来,
UIViewController对“我的滚动视图”的定义相当简单,“在向下搜索我的视图层次结构时出现的第一个滚动视图”

UIPageViewController
恰好是使用滚动视图实现的。因此,容器VC会找到滚动视图,并调整其顶部插图。这不是你真正想要的;它会混淆页面控制器,并在某一点上会扰乱布局

简单的解决方案就是关闭容器视图控制器的
。automaticallyAdjustsScrollViewInsets


然后,您需要解决下一个问题,即表视图需要某种顶部插入来说明导航栏。到目前为止,在我看来,最好的方法是在情节提要或代码中手动执行此操作。

找到了一个优雅的解决方案:

  • 从情节提要中,选择
    UIPageViewController
  • 在属性检查器中,取消选中顶部栏下的选项
    ViewController
    =>
    扩展边
    =>
  • 仅此而已,没有奇怪的UI黑客

  • 问题是我不能因为设计决定而失去这种效果。不管怎样,我找到了一种方法来解决它,我的问题是为什么会发生这种情况?哇,我偶然发现了完全相同的问题,我绝望地用谷歌搜索它(我想我永远也找不到答案,因为我一定犯了一个愚蠢的错误),但你来了,救世主!谢谢你,迈克,这正是我需要的!!是的,这对我来说是正确的解决方案。使用automaticallyAdjustsScrollViewInsets不起作用。在我的例子中,导航控制器中有一个UIPageViewController。UIPageViewController为每个页面创建UICollectionViewController。设置automaticallyAdjustsScrollViewInsets=false导致页面已被推上。automaticallyAdjustsScrollViewInsets=true导致页面开始滚动时跳起。