2015-12-15 52 views
1

我试图在用户点击单元格中的单元格或按钮时在UITableViewController上显示加载视图。出于某种原因,该视图不显示,也不显示任何约束失败。有人可以在我的代码中发现错误。显示时,我需要这个视图来显示两个方向上的桌面视图。我认为这是一个视图渲染问题,在viewWillAppear中尝试了相同的代码。仍然不起作用。因此我消除了布局渲染问题。相同的代码在UIViewController派生类中工作得很好。似乎有单独的UITableViewController类的问题!在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)) 
} 
+0

为什么你给CGRectZero? –

+0

如果我只是说UIView()或UIView(frame:CGRectZero),没有任何区别。我试过 –

+0

你需要给视图框架cgrectmake(x,y,w,h) –

回答

0

您应该让约束引擎知道它需要更新。请参阅UIView Class Reference的触发自动布局部分。此外,我会考虑让你的覆盖视图一个实例变量或找到其他方式来保持它的参考,以便当时间到了,你可以删除它。

待办事项呼叫updateConstraints()而是setNeedsUpdateContraints()

UIView Class Reference

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

如果你有麻烦哟总是可以设置在UIViewController的 viewWillLayoutSubViews()viewDidLayoutSubViews()断点和检查子视图帧。

随着自动布局不断变化和改进,对于自动布局保持更新Apple's documentation也非常有帮助。

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) 
相关问题