NSTableView 意外调整大小
Posted
技术标签:
【中文标题】NSTableView 意外调整大小【英文标题】:NSTableView resizing unexpectedly 【发布时间】:2019-02-27 22:46:51 【问题描述】:我有一个基于单元格的 NSTableView,当我继续向表中添加更多项目时,它意外地垂直调整大小。我已经实现了约束,但它们显然被打破了。
不确定这是否有任何关系,但是当 NSTableView 位于常规 NSWindow 中时,我似乎没有这个问题 - 只有当 NSTableView 位于 NSPopover 中时才会出现此问题(我知道 NSPopover 确实有一个窗口,即 myPopover.contentViewController.view.window)。
我尝试了很多方法来停止自动调整大小,但没有任何效果。
如果我没有在 NSTableView 下方的 NSSegmentedControl 上放置高度限制,就会发生这种情况(它会被压扁,奇怪的是似乎是 NSScrollView 调整大小,而不是 NSTableView):
如果我确实在 NSSegmentedControl 上放置了高度约束(NSScrollView (height = 155) 约束被破坏,并且 NSScrollView 和 NSTableView 都调整大小),就会发生这种情况:
这是我的限制:
【问题讨论】:
您是否在表格视图中添加了任何约束?分段控件的约束附加到哪个视图? 【参考方案1】:嗯,我已经解决了这个问题。通过添加以下代码,我可以阻止 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
【讨论】:
以上是关于NSTableView 意外调整大小的主要内容,如果未能解决你的问题,请参考以下文章
根据表中的行数调整 NSTableView 或 NSScrollView 的大小