设置Tableview的backgroundView

时间:2015-09-07 09:51:06

标签: ios iphone swift uitableview

我的问题是" tableView.backgroundView"。

的图层层次结构

我想为我的tableview实现一个背景图像,并且在演示项目中一切正常。

var testImage = UIImage(named: "Test_Image")
imageView.image = testImage
mytableView.backgroundColor = UIColor.greenColor()
mytableView.backgroundView = imageView

如果我在演示项目中调用它(例如在tableView控制器的viewDidLoad方法中),则一切正常,层次结构正确。单元格的所有按钮/标签/图像......都是动态加载的,它们都在tableview的backgroundColor和backgroundView之上。

我甚至在调试模式中使用UI视图层次结构管理器查找并检查了它。

但在我的真实项目中,当tableview加载时,tableview的backgroundView位于所有视图的顶部?

那么tableview.backgroundView如何位于视图的顶层?单元格的所有按钮/标签/图像......都在tableview本身和tableview.backgroundView之间?

问题实际上是一般问题。我只是想知道为什么tableView的backgroundView可以在其他视图前面?有趣的是tableview.backgroundcolor保留在后面。

如果您需要更多信息,请告诉我。我会尽量提供尽可能多的信息。

View hierarchy

@IBOutlet var mytableView: UITableView!

var man = UIImage(named: "Timeline_Background_Man")
var woman = UIImage(named: "Timeline_Background_Woman")
var imageView = UIImageView()

var delegate: CenterViewControllerDelegate?

override func viewDidLoad() {
    super.viewDidLoad()

    imageView.image = man
    mytableView.backgroundColor = UIColor.greenColor()
    imageView.contentMode = .ScaleAspectFit
    mytableView.backgroundView = imageView
}

提前致谢!

4 个答案:

答案 0 :(得分:0)

我发现Xcode在View层次结构方面可能有点小问题。这有时会发生在我身上并修复它我将背景视图拖动到层次结构中的新位置,然后再回到原来的位置。总是为我解决问题

答案 1 :(得分:0)

正如我在您的代码中看到的,您只是将UIImageView添加到UITableView backgroundView,所以我的建议尽管将视图添加到UITableView backgroundView,但为什么不呢?设置tableViews' backgroundColor patternImage就像这样

 mytableView.backgroundColor = UIColor(patternImage: UIImage(named: "Test_Image"))

答案 2 :(得分:0)

我知道了。

问题是

self.refreshControl = UIRefreshControl()
self.refreshControl!.addTarget(self, action: "refreshTVC:", forControlEvents: UIControlEvents.ValueChanged)
mytableView.addSubview(refreshControl!)

当我向tableView添加Subview时,tableview的backgroundView也跳转到层次结构的顶部,甚至在单元格上方。这是iOS的审议行为吗?

答案 3 :(得分:0)

就我而言,这只是iPhone 4s的问题。所有其他devices都很有效。感谢S. Birklin指出问题UIRefreshControl

请执行此操作,您将能够获得backgroundView的{​​{1}}的刷新控制权。

不使用默认的refreshControl对象,而是创建新的tableView对象,如下所示。

UIRefreshControl

并将此var _refreshControl = UIRefreshControl() 对象用于_refreshControl,如下所示。

tableView

执行此操作后,您将能够获得tableView.addSubview(_refreshControl) 以及refreshControl

希望这有帮助。