容器视图中的子视图控制器在初始加载时具有错误的高度

问题描述 投票:0回答:1

我有一个ViewController,其内容位于前三分之一,然后是视图底部三分之二的UIContainerView。 UIContainerView允许用户在三个childViewController之间旋转。使用AutoLayout,我将UIContainerView约束到屏幕的两侧(widthAnchor),屏幕的底部(bottomAnchor)和屏幕上方的三分之二(topAnchor)。

在第一个childViewController中布局内容,它出现在父ViewController的初始加载中,我遇到了困难。看来,在初始加载时,childViewController视图的view.frame.height等于设备的高度。我设置了约束来处理它,第一个屏幕显示正常。

我现在遇到的问题是,当我通过childViewControllers旋转时,view.frame.height被设置为ContainerView的高度(我从一开始就怀疑是这种情况)。这会导致第一个childViewController中的约束“中断”。

请看下面的这种行为。

图#1:ParentViewController的初始加载。

https://roryent.box.com/s/xhil4wk0ga5qoddhko5jxj3a1r4103h3

图像#2:切换childViewController。

https://roryent.box.com/s/9f2jj0l1waui3ekyplq4eae51m6wrqn5

图#3:回到初始的childViewController。约束“工作”但是对不同的view.frame.height作出反应。

https://roryent.box.com/s/cj9ffyy3m9oh8f523l2vsdezo1frk12x

注意:我在ChildViewController类中创建约束并尝试使用该childViewController框架的框架来执行此操作。

我试图将用于约束项目的方法移动到子视图控制器中的LayoutSubviews()而不做任何更改。

我怀疑我在装载不同物品的位置有问题。

我希望childViewController代码中使用的self.view.frame.height反映显示它的UIContainerView的高度。在我的情况下,高度应该是.67 * UIScreen.Main.Bounds.Height。

uiviewcontroller ios-autolayout uicontainerview
1个回答
0
投票

我相信这个问题是由于我实现了ContainerView及其相应的childViewControllers。

我已按照本教程重建了该功能,并且没有任何问题。 https://cocoacasts.com/managing-view-controllers-with-container-view-controllers/

© www.soinside.com 2019 - 2024. All rights reserved.