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 上的行大小

根据表中的行数调整 NSTableView 或 NSScrollView 的大小

iOS Swift UIImage 调整大小影响性能的问题;调整大小时出现意外尺寸[重复]

UIImage 意外调整大小

iphone/ipad 触发意外的调整大小事件

UITableView 中的 UIImageview:滚动或点击时意外调整大小