在其他视图前面添加来自 xib 的视图

Posted

技术标签:

【中文标题】在其他视图前面添加来自 xib 的视图【英文标题】:Adding view from xib in front of other views 【发布时间】:2016-06-20 11:03:32 【问题描述】:

我正在尝试在其他视图前面添加来自 xib 的自定义视图。但是,由于某种原因,当屏幕上有UITableView 时,它从未被放置为前视图。这是我的代码:

noInternetView = NSBundle.mainBundle().loadNibNamed("NoInternetView", owner: self, options: nil)[0] as! NoInternetView
noInternetView.translatesAutoresizingMaskIntoConstraints = false
noInternetView.delegate = self

self.view.addSubview(noInternetView)
self.view.addConstraint(NSLayoutConstraint(item: noInternetView, attribute: .CenterX, relatedBy: .Equal, toItem: self.view, attribute: .CenterX, multiplier: 1, constant: 0))
self.view.addConstraint(NSLayoutConstraint(item: noInternetView, attribute: .CenterY, relatedBy: .Equal, toItem: self.view, attribute: .CenterY, multiplier: 1, constant: 0))

我把它放在我的viewDidLoad() 代码的底部。为什么会这样?

【问题讨论】:

您可以在 viewdidappear 中尝试一下,并让我知道它是否有效。我已经完成了您所做的,但我的视图在情节提要中,并且从 xib 加载了自定义视图而没有任何问题。那么如何您告诉视图是否落后于其他视图“调试视图层次结构”?? 【参考方案1】:
noInternetView.hidden = true

你的视图被隐藏了,让它可见

noInternetView.hidden = false

【讨论】:

对不起,你是对的,但实际上这是我的代码中的一个错误。没有它,它仍然低于其他子视图。我已将其从问题中的代码中删除以避免混淆! 也可以试试 addChildViewController(noInternetView!) view.addSubview((noInternetView?.view)!) noInternetView 不是视图控制器,它只是 UIView 的子类【参考方案2】:
self.view.bringSubviewToFront(noInternetView)

试试这个可能对你有帮助。

【讨论】:

你在 addsubview 之后还是之前添加了这一行?【参考方案3】:

第一

检查 noInternetView 是否有宽度和高度限制

第二

self.view.addConstraint之后添加self.view.layoutIfNeeded()

这有助于调整您添加的自动布局

【讨论】:

【参考方案4】:

如果您希望视图位于顶部,请将其添加到窗口中。

【讨论】:

以上是关于在其他视图前面添加来自 xib 的视图的主要内容,如果未能解决你的问题,请参考以下文章

从 xib 或带有情节提要的其他场景添加子视图

显示来自 Xib 的自定义视图

Xcode:如何在 UIScrollView 中从 XIB 文件添加自定义视图

如何使用来自 xib 文件的任何子视图(在 xib 中创建)的多个副本

从另一个 XIB (iPhone) 的视图控制器加载 XIB

重用集合视图的 XIB 视图作为其他视图的一部分?