当UITableView中没有显示内容时,我正在使用DZNEmptySet加载。对于DZNEmptySet的方法(例如titleForEmptyDataSet
,imageForEmptyDataSet
),它可以正常工作,但不适用于我要使用的方法(即customViewForEmptyDataSet
)。
当我尝试将xib加载到scrollView.frame
中时,Xcode的内存开始以30兆字节的增量膨胀,并且该应用程序挂起。我知道我有错,但我不知道自己在搞什么。
我在这里查看了许多答案以及其他网站上的教程,但找不到适合这种情况的解决方案(我认为这很简单)。在这方面的任何反馈将不胜感激。
这是customViewForEmptyDataSet
上的MyViewController
// App hangs on this and memory bloats in 30 megabyte increments.
func customViewForEmptyDataSet(scrollView: UIScrollView!) -> UIView! {
return EmptySetView(frame: scrollView.frame)
}
这是我要初始化的
EmptySetView
的类:import UIKit
class EmptySetView: UIView {
var view: UIView!
// These are connected to a xib
@IBOutlet weak var backgroundImageView: UIImageView!
@IBOutlet weak var viewLabel: UILabel!
@IBOutlet weak var viewTextView: UITextView!
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
func setup() {
view = loadViewFromNib()
view.frame = bounds
view.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
self.addSubview(self.view)
}
func loadViewFromNib() -> UIView {
let bundle = NSBundle(forClass:self.dynamicType)
let nib = UINib(nibName: "EmptySetView", bundle: bundle)
let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView
return view
}
}
更新
在Matt's suggestion,我调查了所遇到的递归并发现了问题的根源。
您没有在ibt的视图上指定UIView类。而是单击标题为文件的所有者的黄色多维数据集,然后在其中指定
UIView
,在“文档大纲”面板中的视图上将类字段保留为空。清除缓存并重建后,我可以使用
MyViewController
上的以下代码将视图加载到层次结构中:func customViewForEmptyDataSet(scrollView: UIScrollView!) -> UIView! {
let emptySetView = EmptySetView(frame: scrollView.frame)
return emptySetView
}
在加载xib之前,
EmptySetView
xib和MyViewController
彼此不了解,因此您需要处理布局约束。 最佳答案
我的猜测是,在笔尖中,您正在加载顶级视图本身就是EmptySetView。这导致递归。您首先在代码中实例化EmptySetView:
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
在
setup()
中,加载笔尖。但这会导致从笔尖再次实例化EmptySetView。这次,另一个初始化器称为:required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
但是
setup()
加载了笔尖,因此我们现在绕圈走动,尝试将无数笔尖加载的视图像matrushka娃娃一样相互嵌套。关于ios - 在UIViewController的 subview 上初始化Xib,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38506162/