在我的故事板上我有2个viewControllers,一个带有背景图像,一个带有模糊效果和一个标签
我想在第一个视图之上提出第二个视图。我使用以下代码:
override func viewDidAppear(animated: Bool) {
var vc = self.storyboard?.instantiateViewControllerWithIdentifier("second") as secondViewController
self.view.addSubview(vc.view)
super.viewDidAppear(animated)
}
我使用的是addSubView
而不是presentViewController
,因为最新原因导致我的第一个视图在转换完成后消失,而我得到的只是一个黑屏。
只要我不在第二个视图中添加约束,我的代码就会朝着正确的方向发展(见下文):
但是,当我向第二个视图添加约束时,它根本不会显示。
问:将第二个视图控制器显示为叠加层并为其提供正确约束的正确方法是什么
编辑:我已按照@ topher91的建议尝试添加vc.view.frame = self.view.frame
。一个瞬间出现的视图然后消失。这是调试视图层次结构:
答案 0 :(得分:1)
您应该将叠加层创建为不同的视图而不是新的视图控制器。 然后在故事板中,您可以设置相对于父视图控制器的约束:
或者,您可以像以前一样继续,但在添加子视图之前,将叠加的帧设置为与父级相同。
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>