gpt4 book ai didi

objective-c - 如何在 NSOutlineView 中自动设置行高以适合文本?

转载 作者:行者123 更新时间:2023-12-03 16:36:24 41 4
gpt4 key购买 nike

TLDR:我想实现this question的方法(或任何其他相关方法)在 NSOutlineView 上。

NSOutlineViewNSTableView 更复杂,因为由于父/子关系,某些单元格可能相对于其他单元格缩进。

我愿意使用任何方法,包括 AutoLayout(如果可能的话)。我的 View 是简单的 NSTableCellView 实例,只有一个 NSTextField

<小时/>

我需要能够根据该行的 NSTextField 中的文本在基于 View 的 NSOutlineView 中设置行的高度。

我当前正在使用以下(简化的)代码,该代码利用 NSString+Geometics计算给定宽度的 View 的近似高度:

- (CGFloat)outlineView:(NSOutlineView *)outlineView
heightOfRowByItem:(id)item
{
static NSTableCellView *cell;

if (!cell) {
cell = [self.outlineView makeViewWithIdentifier:@"Cell"
owner:self];
}

NSString *text = [item text];
float width = cell.textField.bounds.size.width;
#warning this is completely wrong due to different levels of indentation

float height = [text heightForWidth:width];

return height;
}

这段代码背后的想法是保留一个临时单元格,以便利用其默认的边界属性。这对于顶级行来说是正确的。

但是,NSOutlineView 中的任何“子”(嵌套)行都会向右缩进。为了正确计算 NSTextField 所需的高度,我需要知道缩进后 NSTextField 的宽度。

我怎样才能获得这些信息?

<小时/>

我应该注意,无法调用

[outlineView viewAtColumn:0
row:[outlineView rowForItem:item]
makeIfNecessary:YES]

来自outlineView:heightOfRowByItem:,这意味着您无法获取对当前单元格的引用。

最佳答案

使用-[NSOutlineView indentationPerLevel]计算缩小的子宽度。

关于objective-c - 如何在 NSOutlineView 中自动设置行高以适合文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22281833/

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