dev*_*ush 9 objective-c uitableview ios uipageviewcontroller uicontainerview
我已经创建了一个基于页面的应用程序,并为一些实验进行了一些攻击; 我的简单目标是拥有一个UIPageViewController,其页面将包含一个UIViewController,其中包含一个UITableView(在进一步检查之后,如果我使用UITableViewController,我的实验结果是相同的).为此,我简单地编辑了项目模板,并使用Storyboard的ContainerView对象将UIPageViewController添加为RootViewController的嵌入视图,如此截图中所示:

每个控制器都通过故事板配置来自动调整滚动视图的内容插入,如果我使用此配置启动项目,一切看起来都很好,并且DataViewController的tableview正确地在导航栏下按预期正确调整内容插件; 但是,当用户与tableview进行交互时,内容insets会中断,tableview会在导航栏下面显示:

我已经能够通过在DataViewController的viewDidLayoutSubview方法中手动设置内容insets,并通过在任何控制器上禁用Adjusts Scroll View Insets来解决这个问题,所以我不需要这个来解决我的问题.我的问题是为什么在第一次控制器第一次从故事板加载后正确设置内容插入,以及为什么它们在任何类型的用户交互后中断.
如果您需要直接测试,这里是项目的链接
Mik*_*lah 16
我不是100%肯定这是你遇到的,但这里有一些关于你的设置的解释:
默认情况下,UIViewControllers倾向于配置为将其内容扩展到非不透明条形后面,并调整滚动视图插入.在上面的设置中,这意味着容器VC:
.contentInset并.scrollIndicatorInsets与导航栏的高度相同"但是,啊!" 我听说你说"容器视图控制器没有滚动视图".那么这是一个棘手的问题:
似乎UIViewController's"我的滚动视图"的定义相当简单,"我在搜索视图层次结构时查看的第一个滚动视图".
UIPageViewController碰巧使用滚动视图实现.因此容器VC找到滚动视图,并调整其顶部插入.这不是你想要的; 它会混淆页面控制器,并且往往会在某些时候扰乱布局.
简单的解决方案就是关闭.automaticallyAdjustsScrollViewInsets容器视图控制器.
然后,您需要解决表视图的下一个问题,需要使用某种顶级插图来考虑导航栏.到目前为止,在我看来,最好的方法是在故事板或代码中手动操作.
找到优雅的解决方案:
UIPageViewControllerViewController=> Extend Edges=>Under Top Bars| 归档时间: |
|
| 查看次数: |
5171 次 |
| 最近记录: |