添加为子视图时,自定义视图控制器的视图布局变得错误

CustomViewController's view's layout becomes wrong when added as subview

我已经创建了一个 CustomViewController 并将其布置在界面生成器中。然后我准备使用 CustomViewController 的视图作为另一个 viewcontroller 中的子视图,但是当我将它添加到另一个 viewcontroller 时,自定义 uivewcontroller 的布局变得错误。

这是什么原因造成的?这样做的正确方法是什么?

可以在此处找到整个项目 https://github.com/agustr/STHLMPubCrawl 只需下载并 运行(在 iphone 5 模拟器中)。如果对它的外观有任何疑问,您可以将初始视图指针移动到 'place view controller cene'

这是代码:

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let vc = storyboard.instantiateViewControllerWithIdentifier("GPPlaceViewController") as? GPPlaceViewController
    if vc != nil{

        vc?.view.layer.borderWidth = 4
        vc?.view.layer.borderColor = UIColor.redColor().CGColor

        self.GPPlaceView.layer.borderColor = UIColor.yellowColor().CGColor
        self.GPPlaceView.layer.borderWidth = 2

        vc?.view.frame.size =  self.GPPlaceView.frame.size

        self.GPPlaceView.addSubview(vc!.view)
    }
    else {
        print("could not load GPPlacePageViewController from storyboard")
    }

欢迎任何帮助。

我不确定这种将 VC 的视图添加到另一个视图的方法是否错误或过时,但我似乎记得它在某些时候起作用。我联系了苹果,他们告诉我使用 ContainerView。据推测,在本次演讲 'Implementing UIViewController Containment' https://developer.apple.com/videos/wwdc/2011/ 中对其进行了详细解释。

我在使用包含视图时遇到的最大问题是您无法在界面构建器中拖动转场,但您必须右键单击或控制单击以将转场指向适当的位置。然后你可以把那个 segue 当作你父 viewcontroller 中的任何其他 segue,也就是说 viewcontroller 包含容器视图。