gpt4 book ai didi

cocoa - 调用 reloadData 时 NSTableView 无法满足约束

转载 作者:行者123 更新时间:2023-12-03 16:09:34 25 4
gpt4 key购买 nike

我有一个基于 View 的 NSTableView,其中表格 View 的 NSTableCellView 通过界面生成器在 10.8.2 最新版本的 Xcode 中以图形方式设置。

当我在 NSTableView 上调用 -reloadData 时,它崩溃了:

Unable to simultaneously satisfy constraints:
(
"<NSAutoresizingMaskLayoutConstraint:0x105cb8bf0 h=--& v=--& V:[NSTableRowView:0x105ca7020(0)]>",
"<NSAutoresizingMaskLayoutConstraint:0x10596aa30 h=--& v=-&- V:[GroupTableRowView]-(2)-| (Names: GroupTableRowView:0x100185860, '|':NSTableRowView:0x105ca7020 )>",
"<NSAutoresizingMaskLayoutConstraint:0x1058d9770 h=--& v=-&- V:|-(1)-[GroupTableRowView] (Names: GroupTableRowView:0x100185860, '|':NSTableRowView:0x105ca7020 )>"
)

Will attempt to recover by breaking constraint
<NSAutoresizingMaskLayoutConstraint:0x10596aa30 h=--& v=-&- V:[GroupTableRowView]-(2)-| (Names: GroupTableRowView:0x100185860, '|':NSTableRowView:0x105ca7020 )>

我无法关闭所涉及的任何 View 上的自动调整大小掩码转换,因为它们的约束由 NSTableView 管理。很明显,这些约束是冲突的,因为 NSTableRowView 不可能具有 0 高度,同时仍然满足 GroupTableRowView 上指定 super View (行 View ?)之间的强制填充的其他两个约束。我不确定如何解决这个问题,任何见解将不胜感激。谢谢!

更新:我找到了一个解决方法。问题在于,由于某种原因,在 TableView 上调用 -reloadData 时,NSTableRowView 发送的帧大小为 {0, 0}。我在 NSTableRowView 子类中覆盖了 -setFrameSize:,并且仅当大小不是 {0,0} 时才将消息传递到响应者链。

- (void)setFrameSize:(NSSize)newSize
{
if (!NSEqualSizes(newSize, NSZeroSize))
[super setFrameSize:newSize];
}

要使用子类,请实现 NSTableViewDelegate 的 -tableView:rowViewForRow:方法返回自定义子类的实例。

- (NSTableRowView *)tableView:(NSTableView *)tableView rowViewForRow:(NSInteger)row
{
id rowView = [[GroupTableRowView alloc] init];
// configure any custom properties
return rowView;
}

如果表格 View 完全用 IB 设计,您只需将一个新的 NSView 拖到表格 View 中,并将其自定义类设置为 NSTableRowView 子类,并将其用户界面项标识符更改为 NSTableViewRowViewKey

最佳答案

我也遇到了同样的问题,它总是让我发疯..

我已经使用您的代码解决了这个问题,但是子类化了 NSTableRowView 而不是 NSTableCellView。要自动让表格使用您的自定义行 View ,请将自定义 NSView 添加到您的表格中。将其类设置为您的自定义行 View ,重要的是,将其标识符设置为 NSTableViewRowViewKey

有了这个特殊标识符,表会自动将其用作行 View 。

关于cocoa - 调用 reloadData 时 NSTableView 无法满足约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14165087/

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