自动布局 - 视图控制器框架不正确

Posted

技术标签:

【中文标题】自动布局 - 视图控制器框架不正确【英文标题】:Autolayout - view controller frame incorrect 【发布时间】:2015-08-01 01:04:46 【问题描述】:

我试图弄清楚为什么我的视图控制器的框架(从 xib 加载)在通过 presentViewController 呈现时设置正确:

self.presentViewController(testVC, animated: true, completion: nil);

...但在添加为子视图控制器时保持在 (0, 0, 600, 600):

self.addChildViewController(testVC)
self.view.addSubview(testVC.view)
testVC.didMoveToParentViewController(self)
testVC.view.setNeedsLayout(); (makes no difference)

我可以提供一个孤立的示例,更清楚地说明问题。想法?

【问题讨论】:

请提供所有代码以便可以复制? 一个明确的问题,一个明确的答案,但多次否决。我永远不会明白。 【参考方案1】:

试试这个。

self.addChildViewController(testVC)
testVC.view.frame=self.view.bounds//or set by CGRectMake()
testVC.willMoveToParentViewController(self)
self.view.addSubview(testVC.view)
testVC.didMoveToParentViewController(self)

【讨论】:

【参考方案2】:

那是因为你忘了给它一个框架!你是说:

self.view.addSubview(testVC.view)

但是您既没有应用frame 也没有附加任何约束,因此不会调整视图大小。 现在是父母。调整子视图的大小取决于。如果你不这样做,它的大小就是它在故事板中的大小——600 x 600,就像你说的那样。它不会被魔法调整大小。 必须这样做。

【讨论】:

以上是关于自动布局 - 视图控制器框架不正确的主要内容,如果未能解决你的问题,请参考以下文章

关闭模式视图控制器后,框架不反映自动布局约束

如何使用自动布局在两个子视图控制器之间移动?

UIView 没有正确定位启用自动布局的故事板

当自动布局约束在视图控制器生命周期中设置框架?

Swift - 使用自动布局时获取视图框架

将视图添加到视图控制器并使用自动布局通过旋转完全覆盖它的正确方法是啥?