2

我正在使用基于视图的表格视图。每个单元格都是NSView具有自动布局约束的简单单元格,并且单元格包含多个视图,其中主要是一个NSTableView(包装在一个强制性的NSScrollView,而后者又被包装在一个简单的NSView)。

当我的tableView:viewForTableColumn:row委托方法被调用时,我makeViewWithIdentifier用来创建我的视图。

然后我设置了视图。在许多其他事情中,单元格的内部表格视图获取数据源。

但是,如果视图是一个正在被回收的视图,我会在日志中看到以下熟悉的错误:

Unable to simultaneously satisfy constraints:
(
    "<NSLayoutConstraint:0x10ab8a020 V:[NSView:0x100423720(132)]>",
    "<NSLayoutConstraint:0x1004581e0 NSScrollView:0x1004c82c0.bottom == NSView:0x100423720.bottom>",
    "<NSLayoutConstraint:0x100458340 V:|-(0)-[NSScrollView:0x1004c82c0]   (Names: '|':NSView:0x100423720 )>",
    "<NSAutoresizingMaskLayoutConstraint:0x10138d730 h=-&- v=-&- V:[NSClipView:0x1004ca010]-(220)-|   (Names: '|':NSScrollView:0x1004c82c0 )>",
    "<NSAutoresizingMaskLayoutConstraint:0x10138d6d0 h=-&- v=-&- V:|-(0)-[NSClipView:0x1004ca010]   (Names: '|':NSScrollView:0x1004c82c0 )>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x1004581e0 NSScrollView:0x1004c82c0.bottom == NSView:0x100423720.bottom>

请注意内部剪辑视图在这种情况下如何将其约束设置为高度 220。这实际上是表格的先前高度。

不管我做什么,表格都不会刷新它的高度:我尝试过更改数据源、调用tile、强制布局、强制约束更新、删除表格视图并重新添加它等等。没有任何帮助。

奇怪的是布局约束首先存在,因为translatesAutoresizingMaskIntoConstraints我的所有视图都禁用了。其实我dumptableView.constraints到日志的话,一开始是没有约束的,但是wham,突然一大堆,其实是一堆奇怪的重复约束:

"<NSAutoresizingMaskLayoutConstraint:0x1013c2360 h=--& v=--& H:|-(-100)-[NSScroller:0x1030ea3c0]   (Names: '|':ScrollViewWithoutScrolling:0x1030e8c80 )>",
"<NSAutoresizingMaskLayoutConstraint:0x1013c23c0 h=--& v=--& H:[NSScroller:0x1030ea3c0(15)]>",
"<NSAutoresizingMaskLayoutConstraint:0x1013c2420 h=--& v=--& V:|-(-100)-[NSScroller:0x1030ea3c0]   (Names: '|':ScrollViewWithoutScrolling:0x1030e8c80 )>",
"<NSAutoresizingMaskLayoutConstraint:0x1013c2290 h=--& v=--& V:[NSScroller:0x1030ea3c0(102)]>",
"<NSAutoresizingMaskLayoutConstraint:0x1013c2de0 h=--& v=--& H:|-(-100)-[NSScroller:0x1030ea620]   (Names: '|':ScrollViewWithoutScrolling:0x1030e8c80 )>",
"<NSAutoresizingMaskLayoutConstraint:0x1013c2e50 h=--& v=--& H:[NSScroller:0x1030ea620(223)]>",
"<NSAutoresizingMaskLayoutConstraint:0x1013c2eb0 h=--& v=--& V:|-(-100)-[NSScroller:0x1030ea620]   (Names: '|':ScrollViewWithoutScrolling:0x1030e8c80 )>",
"<NSAutoresizingMaskLayoutConstraint:0x1013c2f10 h=--& v=--& V:[NSScroller:0x1030ea620(15)]>",
"<NSAutoresizingMaskLayoutConstraint:0x1013c4500 h=-&- v=-&- H:|-(0)-[NSClipView:0x1030ea880]   (Names: '|':ScrollViewWithoutScrolling:0x1030e8c80 )>",
"<NSAutoresizingMaskLayoutConstraint:0x1013c4570 h=-&- v=-&- H:[NSClipView:0x1030ea880]-(0)-|   (Names: '|':ScrollViewWithoutScrolling:0x1030e8c80 )>",
"<NSAutoresizingMaskLayoutConstraint:0x1013c45d0 h=-&- v=-&- V:|-(0)-[NSClipView:0x1030ea880]   (Names: '|':ScrollViewWithoutScrolling:0x1030e8c80 )>",
"<NSAutoresizingMaskLayoutConstraint:0x1013c4630 h=-&- v=-&- V:[NSClipView:0x1030ea880]-(110)-|   (Names: '|':ScrollViewWithoutScrolling:0x1030e8c80 )>"

这对我来说很像一个错误。有些东西正在创造这些约束(并且做错了),但不是我。我已经尝试删除它们,只是想看看会发生什么,但要么removeConstraint不删除它们,要么constraints 正在重新创建它们。

只有一个视图已translatesAutoresizingMaskIntoConstraints启用:单元格视图本身。那是因为如果我禁用它,它会奇怪地变成完全空的。

一般来说,基于视图的表格中单元格视图的自动布局似乎是在自找麻烦,但我希望有一种方法可以让它工作。

4

0 回答 0