presentViewController不显示所呈现的视图控制器

时间:2016-02-23 12:36:08

标签: ios swift2 viewcontroller xcode-storyboard presentviewcontroller

尝试使用以下代码在故事板中呈现新的视图控制器时遇到问题:

    let viewController = self.storyboard?.instantiateViewControllerWithIdentifier("ViewControllerIdentifier")
    self.presentViewController(viewController!, animated: true, completion: nil)

视图控制器确实出现了,但出于某种原因只显示了两个按钮,没有其他元素。

到目前为止我尝试了什么:

  • 将视图控制器加载为初始视图控制器以查看是否 问题依然存在 不,所有元素都在正确的位置。
  • 将动画从true切换为false。 问题仍然存在
  • 打印隐藏属性以及x和y位置。 隐藏 是假的,这些职位是他们应该是
  • 清理和重建项目,因为这似乎可以解决99%的问题 所有奇怪的错误都基于我的经验。 可悲的是,这对此没有帮助 时间
  • 首先将隐藏设置为true,然后设置为false。 重置属性 没有帮助。
  • 使用CFRunLoopWakeUp(CFRunLoopGetCurrent())没有帮助 无论是。

我简单地描绘了我的视图所附着的内容。 view controller

如上所述,当我将视图控制器加载为初始视图控制器时,视图控制器显示完全正常,但在使用上述代码时仅显示按钮。 ViewDidAppear也被调用。

我正在使用Xcode Version 7.2.1

编辑: 根据评论的要求,这是我要呈现的视图控制器的代码:

import UIKit

class myViewController : UIViewController {

    @IBOutlet weak var myImage: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
    }

    override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask    {
        return UIInterfaceOrientationMask.Portrait
    }


}

编辑: 我找到了解决这个问题的方法: 通过在以下块中创建转换。

dispatch_async(dispatch_get_main_queue(),^{

});

看来我的问题是,触发所述转换的行没有在UI线程上执行。我仍然不知道为什么会导致上述行为,但至少有一个解决方案。

1 个答案:

答案 0 :(得分:1)

根据我的经验,这样的问题可能归结为你的自动布局约束被弄乱了或者不是你需要它们(尽管它是默认情况下它正确呈现的事实可能暗示我没有走向正确的道路)。

故事板编辑器中是否有任何警告表明约束不正确?我还建议使用视图调试功能来帮助排除故障。在应用程序运行时单击带圆圈的图标以显示视图层次结构,然后尝试查找您认为应该存在的视图。它还允许您查看约束,因此这也可能有助于上面的第1点。

enter image description here