【问题标题】:swift - adding constraints to a modal viewswift - 向模态视图添加约束
【发布时间】:2015-02-25 16:32:29
【问题描述】:

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

我想在第一个视图之上呈现第二个视图。我正在使用以下代码:

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

    super.viewDidAppear(animated)
}

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

只要我不对第二个视图添加约束,我的代码似乎就在正确的方向(见下文):

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

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

编辑:我尝试按照@topher91 的建议添加vc.view.frame = self.view.frame。视图出现片刻然后消失。这是调试视图层次结构:

【问题讨论】:

    标签: ios xcode swift layout constraints


    【解决方案1】:

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

    Custom views with Storyboard

    或者,您可以像以前一样继续,但在 addSubview 之前将叠加层的框架设置为与父级相同。

    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)
    }
    

    【讨论】:

    • 谢谢您的回复,我去看看。你知道这是否是创建封装一些逻辑的模态叠加层的正确方法吗?
    【解决方案2】:

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

    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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-18
      • 1970-01-01
      • 1970-01-01
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      • 2020-11-12
      • 1970-01-01
      相关资源
      最近更新 更多