在UITableViewController上加载视图

时间:2015-12-15 21:09:15

标签: ios uitableview

当用户点击单元格中的单元格或按钮时,我试图在UITableViewController顶部显示加载视图。出于某种原因,视图没有显示,也没有显示任何约束失败。有人可以在我的代码中发现错误。如图所示,我需要此视图显示两个方向的tableview。我认为这是一个视图渲染问题,在viewWillAppear中尝试了相同的代码。仍然无法正常工作。因此我消除了布局渲染问题。相同的代码在UIViewController派生类上完美运行。似乎单独在UITableViewController类上有问题!!!

private func initActivityView() {
    let overlayView = UIView(frame: CGRectZero)
    overlayView.backgroundColor = UIColor.lightGrayColor()
    overlayView.translatesAutoresizingMaskIntoConstraints = false
    overlayView.alpha = 0.5
    self.view.addSubview(overlayView)
    // add constraints
    let viewDictionary = ["overlayView":overlayView]

    self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-0-[overlayView]-0-|", 
        options: .AlignAllBaseline, metrics: nil, views: viewDictionary))
    self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-0-[overlayView]-0-|", 
        options: .AlignAllBaseline, metrics: nil, views: viewDictionary))
}

2 个答案:

答案 0 :(得分:0)

您应该让约束引擎知道它需要更新。请参阅UIView Class Reference的触发自动布局部分。此外,我会考虑使您的叠加视图成为一个实例变量,或者找一些其他方法来保持它的引用,以便在时机成熟时将其删除。

致电updateConstraints(),而是setNeedsUpdateContraints()

来自UIView Class Reference

  

讨论   当自定义视图的属性以某种方式更改时   会影响约束,你可以调用这个方法来表示   需要在将来的某个时刻更新约束。该   然后系统将调用updateConstraints作为其正常布局的一部分   通过。在需要之前立即更新约束   确保您不会在不必要的情况下重新计算约束   在布局过程之间对视图进行了多处更改。

如果您遇到麻烦,可以随时在UIViewController上设置断点 viewWillLayoutSubViews()viewDidLayoutSubViews()并检查您的子视图框架。

使用Apple's documentation更新自动布局也非常有用,因为自动布局不断变化和改进。

答案 1 :(得分:0)

由于UITableViewController的固有特性,显然这样做自动布局方式不起作用。然而,这个问题的更好的解决方案将是这样的

let overlayView1 = UIView(frame: self.tableView.frame)
overlayView1.autoresizingMask = self.tableView.autoresizingMask
overlayView1.backgroundColor = UIColor.lightGrayColor()
overlayView1.alpha = 0.5

self.tableView.addSubview(overlayView1)