presentViewController 不显示呈现视图控制器上的所有元素

Posted

技术标签:

【中文标题】presentViewController 不显示呈现视图控制器上的所有元素【英文标题】:presentViewController shows not all elements on presented view controller 【发布时间】:2016-02-23 12:36:08 【问题描述】:

我在尝试使用以下代码在情节提要中呈现新视图控制器时遇到问题:

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

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

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

加载视图控制器作为初始视图控制器,看看是否 问题依然存在。 不,所有元素都在正确的位置。 将动画从真切换为假。 问题依然存在 打印隐藏属性以及 x 和 y 位置。 隐藏 是错误的,并且位置是它们应该是的 清理和重建项目,因为这似乎修复了 99% 根据我的经验,所有奇怪的错误。 遗憾的是,这没有帮助 时间 先将隐藏设置为真,然后再设置为假。 重置属性 没有帮助。 使用CFRunLoopWakeUp(CFRunLoopGetCurrent())没有帮助 要么。

我有一个我的视图看起来像附加的简单绘图。

如上所述,当我将视图控制器加载为初始视图控制器时,它显示得非常好,但使用上面的代码时只显示按钮。 ViewDidAppear 也会被调用。

我使用的是 Xcode 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 线程上执行。我仍然不知道为什么这会导致上述行为,但至少有一个解决方案。

【问题讨论】:

单击并选择 Storyboard ViewController 文件中的每个 UI 控件。转到编辑器->排列->发送到前面。尝试这样做。 你能在正在呈现的 viewController 中显示代码吗? @Ted 我编辑了问题以显示代码,但正如您所见,它并没有什么令人印象深刻的。到目前为止,我刚刚关闭了横向模式。 @Vignesh 这没什么区别。 @Nerethar 您是否添加了任何约束?如果您这样做了,请为所有 UI 控件设置约束。并尝试运行 【参考方案1】:

根据我的经验,这样的问题可能归结为您的自动布局约束被弄乱了或不完全符合您的需要(尽管它在默认情况下正确显示的事实可能表明我没有走上正确的道路)。

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

【讨论】:

我自己手动设置了约束,它们工作正常。我可以在将视图加载为初始视图时看到它。我也没有收到有关约束的警告或错误。使用带有此图标的调试,我看到我的视图控制器没有标签(但我可以看到它们的放置位置,并且我看到右侧窗口中的文本)。图像视图在调试中正确显示。 OK...何时,即在哪个函数中,您调用方法来呈现有问题的 VC?

以上是关于presentViewController 不显示呈现视图控制器上的所有元素的主要内容,如果未能解决你的问题,请参考以下文章

presentViewController 不显示呈现视图控制器上的所有元素

iOS:presentViewController 错误 不鼓励在分离的视图控制器上显示视图控制器

xcode在presentViewController之后更改标签的文本

presentViewController 不工作

presentViewController 不存在

容器视图中的presentViewController