NSTableView意外调整大小

时间:2019-02-27 22:46:52

标签: objective-c autolayout nstableview

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

不确定是否以任何方式相关,但是当NSTableView位于常规NSWindow中时,我似乎没有此问题-仅当NSTableView位于NSPopover中时,此问题才会发生(我知道NSPopover确实具有一个窗口,即myPopover.contentViewController.view.window)。

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

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

enter image description here

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

enter image description here

这是我的限制条件:

enter image description here

1 个答案:

答案 0 :(得分:0)

好吧,我已经解决了这个问题。通过添加以下代码,可以防止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