我的应用程序中有两个NSTableView,用户可以将项目从表A拖放到表B.当将项目拖动到表格B时,Xcode会给我以下布局警告消息:
调用后仍需要更新布局 - [NSTableRowView布局]。 NSTableRowView或其中一个超类可能已重写-layout 没有打电话超级。或者,某些东西可能会有污垢的布局 更新它的中间。两者都是Cocoa中的编程错误 自动布局。如果有一些前Cocoa,前者很可能会出现 Autolayout类有一个名为layout的方法,但应该修复它。
只有当项目被拖到表B时才会发生这种情况。我在IB中没有自动布局警告,布局中的所有内容看起来都正确设置。有人知道上面的消息试图告诉我什么吗?这些表使用标准的Cocoa类(不是子类)。
答案 0 :(得分:3)
我修复了它(或者更确切地说是围绕它),除了NSTableViewDropOperation.Above
之外不允许使用drop操作类型。在用户将放到其他行之前,而不仅仅是行之间。但我希望它们只允许在行之间删除,这样对我来说没问题。这是修复它的代码:
func tableView(aTableView:NSTableView, validateDrop info:NSDraggingInfo, proposedRow row:Int, proposedDropOperation operation:NSTableViewDropOperation) -> NSDragOperation
{
if (operation == .Above) { return .Move; }
return .None;
}
答案 1 :(得分:1)
就我而言,警告略有不同。
调用后仍需要更新布局 - [NSView布局]。 NSView或 其中一个超类可能在没有调用的情况下覆盖了--layout 超。或者,在更新过程中可能会出现脏污布局 它。两者都是Cocoa Autolayout中的编程错误。前者是 如果一些pre-Cocoa Autolayout类有一个方法,很可能会出现 叫布局,但应该修复。
不同的班级NSView
。
无论如何,我可以通过设置translatesAutoresizingMaskIntoConstraints == false
的{{1}}来解决此问题。
对于记录,NSScrollView
和autoresizingMask
根本不需要触及。
警告只是意味着我必须手动设置属性,否则会产生错误的约束。但弄清楚有问题的对象是非常困难的。我必须迭代所有视图节点以检查属性状态。