swift - 为模态视图添加约束

时间:2014-12-29 13:20:19

标签: ios xcode swift layout constraints

在我的故事板上我有2个viewControllers,一个带有背景图像,一个带有模糊效果和一个标签

storyboard

我想在第一个视图之上提出第二个视图。我使用以下代码:

 override func viewDidAppear(animated: Bool) {
    var vc = self.storyboard?.instantiateViewControllerWithIdentifier("second") as secondViewController
    self.view.addSubview(vc.view)

    super.viewDidAppear(animated)
}

我使用的是addSubView而不是presentViewController,因为最新原因导致我的第一个视图在转换完成后消失,而我得到的只是一个黑屏。

只要我不在第二个视图中添加约束,我的代码就会朝着正确的方向发展(见下文):

enter image description here

但是,当我向第二个视图添加约束时,它根本不会显示。

:将第二个视图控制器显示为叠加层并为其提供正确约束的正确方法是什么

编辑:我已按照@ topher91的建议尝试添加vc.view.frame = self.view.frame。一个瞬间出现的视图然后消失。这是调试视图层次结构: enter image description here

2 个答案:

答案 0 :(得分:1)

您应该将叠加层创建为不同的视图而不是新的视图控制器。 然后在故事板中,您可以设置相对于父视图控制器的约束:

Custom views with Storyboard

或者,您可以像以前一样继续,但在添加子视图之前,将叠加的帧设置为与父级相同。

override func viewDidAppear(animated: Bool) {
    var vc = self.storyboard?.instantiateViewControllerWithIdentifier("second") as secondViewController

    vc.view.frame = self.view.frame
    self.view.addSubview(vc.view)

    super.viewDidAppear(animated)
}

答案 1 :(得分:0)

最后,这完全是一个约束问题。我添加视图的代码非常简单:

var registrationVC = self.storyboard?.instantiateViewControllerWithIdentifier("registration") as RegistrationViewController
    self.view.addSubview(registrationVC.view)

以下是模糊视图的约束:

<constraints>
    <constraint firstItem="iT5-uU-X9N" firstAttribute="leading" secondItem="V3l-eN-oQT" secondAttribute="leading" id="7EH-Cu-ZOY"/>
    <constraint firstAttribute="centerY" secondItem="iT5-uU-X9N" secondAttribute="centerY" id="AZj-sB-ByG"/>
    <constraint firstItem="fEQ-lT-dLv" firstAttribute="top" secondItem="iT5-uU-X9N" secondAttribute="bottom" id="KF2-8m-P2T"/>
    <constraint firstItem="iT5-uU-X9N" firstAttribute="top" secondItem="V3l-eN-oQT" secondAttribute="top" id="PsG-ox-lQL"/>
    <constraint firstAttribute="trailing" secondItem="iT5-uU-X9N" secondAttribute="trailing" id="cYs-qE-sVQ"/>
    <constraint firstAttribute="centerX" secondItem="iT5-uU-X9N" secondAttribute="centerX" id="qEL-Ln-Is9"/>
 </constraints>