gpt4 book ai didi

xcode - NSOutlineView 和 NSView-Encapsulated-Layout-Height 中的 NSTableView

转载 作者:可可西里 更新时间:2023-11-01 00:52:32 24 4
gpt4 key购买 nike

我正在 OS X 10.10.5 上使用 Swift 和 Xcode 6.4 构建一个 OS X 应用程序。在我的应用程序的特定 View 中,我希望有一个类似 this 的 View 一个 Xcode 在数据模型编辑器上。

我尝试使用 OutlineView 复制此 View ,其中每个“行”都有一个标题和一个 TableView 加上两个按钮(用于加号和减号按钮)。出于测试目的,我将 TableView+Buttons 的标题分开,类似于 this (这是许多不同尝试中的一种)。

除了具有 TableView+Buttons 的 View 之外,一切都按预期工作,它永远不会超过 17 像素。如果我在一个 View 中定义所有内容,我会遇到同样的问题。我已经尝试定义所需的约束,但在那种情况下,存在一个似乎自动称为 NSView-Encapsulated-Layout-Height 的约束问题,它将高度强制为 17 像素:

NSLayoutConstraint:0x61800008ea10 'NSView-Encapsulated-Layout-Height' > V:[NotesTable(17)] (Names: NotesTable:0x60000012e2e0 )

我没有为 17 像素定义任何约束,我尝试使用一些通常会插入自动约束的参数进行测试(autoresizesSubviews/translatesAutoresizingMaskIntoConstraints/autoresizingMask),但我只能将“特殊”约束转换为另一种格式,并且增长不会变大。

尝试搜索网络,但我只得到封装约束有意义且有用的情况。

您知道在哪里或如何禁用该约束或将其值更改为我需要的高度吗?

最佳答案

OS X 上的表格和大纲 View 不支持根据单元格 View 的动态高度自动确定行高。它们要么具有显式静态行高、由单元格 View 的设计时高度确定的静态行高,要么由委托(delegate)及其 -tableView:heightOfRow: 实现确定的动态行高或 -outlineView:heightOfRowByItem:

对于您的情况,您将必须实现委托(delegate)方法。此外,委托(delegate)方法无法查询实际的单元格 View ,因为它可能不存在并且大纲 View 在创建它之前需要行高。因此,委托(delegate)人必须以其他方式计算它。

一种方法是保留原型(prototype)单元格 View 的独立 View 层次结构。当代理被要求提供行高时,它会配置该 View 层次结构,就像该行/项目的实际单元格 View 一样,强制它自行布局,然后查询其高度。配置 View 层次结构可能与设置顶级 View 的 objectValue 一样简单(如果它是一个 NSTableCellView,一个控件,或者以其他方式实现 setter)。但是,如果您的委托(delegate)进行其他配置,例如在其 -outlineView:viewForTableColumn:item: 方法中,那么您将需要为这个原型(prototype) View 层次结构复制它。

此外,当任何影响行高的因素发生变化时,您必须调用大纲 View 的 -noteHeightOfRowsWithIndexesChanged: 方法让它知道,因此它会重新查询您的 ...heightOfRow... 方法。

最后,裸 TableView 并不特别适合被限制为兄弟 View 或其父 View 。他们真的很想生活在 ScrollView 中,并继续使用 Spring 和支柱来定位和调整自己的大小。参见 my answer to another question对此进行讨论。这可能在操作系统的最新版本中得到了改进。无论如何,您将不得不观察 TableView 的框架更改通知(并要求它发布此类通知)以了解它何时增长。并且您设置约束以将其与单元格 View 层次结构中的任何其他 View 相关联的能力将受到严重限制,因为它需要打开 translatesAutoresizingMaskIntoConstraints

关于xcode - NSOutlineView 和 NSView-Encapsulated-Layout-Height 中的 NSTableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32193300/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com