NSTableView 意外调整大小

NSTableView resizing unexpectedly

我有一个基于单元格的 NSTableView,它在我继续向 table 添加更多项目时意外地垂直调整大小。我已经实施了约束,但它们显然被打破了。

不确定这是否有任何相关性,但是当 NSTableView 在常规 NSWindow 中时我似乎没有这个问题 - 只有当 NSTableView 在 NSPopover 中时才会出现这个问题(我知道 NSPopover确实有 window,即 myPopover.contentViewController.view.window).

我尝试了很多方法来停止自动调整大小,但没有任何效果。

如果我没有在 NSTableView 下方的 NSSegmentedControl 上设置高度限制,就会发生这种情况(它被压扁,奇怪的是似乎是 NSScrollView 调整大小,而不是 NSTableView):

如果我在 NSSegmentedControl 上设置高度约束(NSScrollView(高度 = 155)约束被打破,并且 NSScrollView 和 NSTableView 都调整大小),就会发生这种情况:

这是我的约束条件:

好吧,我已经解决了这个问题。通过添加以下代码,我可以防止 NSTableView 调整大小,如原始问题的示例 GIF 所示。

myTableView.superview.translatesAutoresizingMaskIntoConstraints = NO;

虽然上面的代码阻止了 NSTableView 意外调整大小,但我仍然看到有关 NSScrollView 高度限制被破坏的错误记录:

[Layout] Unable to simultaneously satisfy constraints:
...
Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x60000212f840 NSScrollView:0x600003d01680.height == 155   (active)>


我可以通过将 NSScrollView 的高度约束(在原始问题的最后一个屏幕截图中显示)从 (height = 155) 更改为 (height >= 155) 来消除此错误。但是,我仍然希望强制 NSScrollView 和 NSTable 视图的高度都保持在 155。

如果没有其他人有答案,我想我会使用此修复程序,直到找到更好的解决方案。

对于那些想知道的人,我在阅读这篇文章后制定了这个解决方案: https://www.hackingwithswift.com/example-code/uikit/how-to-stop-auto-layout-and-autoresizing-masks-conflicting-translatesautoresizingmaskintoconstraints