当用户点击单元格中的单元格或按钮时,我试图在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))
}
答案 0 :(得分:0)
您应该让约束引擎知道它需要更新。请参阅UIView Class Reference的触发自动布局部分。此外,我会考虑使您的叠加视图成为一个实例变量,或者找一些其他方法来保持它的引用,以便在时机成熟时将其删除。
不致电updateConstraints()
,而是setNeedsUpdateContraints()
讨论 当自定义视图的属性以某种方式更改时 会影响约束,你可以调用这个方法来表示 需要在将来的某个时刻更新约束。该 然后系统将调用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)