gpt4 book ai didi

objective-c - 如何根据 NSTextField 的大小来调整 NSTableCellView 的大小?

转载 作者:行者123 更新时间:2023-12-03 17:39:26 24 4
gpt4 key购买 nike

我知道在基于 View 的 TableView 中,行类 NSTableCellView 是 NSView 的子类。这个类包含两个属性,一个 NSTextField 和一个 NSImageView。我只使用 NSTextField 而不使用 ImageView 。但是, TableView 中的某些单元格必须包含多行文本,而其他单元格可能只包含一两行。我需要能够根据 NSTextField textField 属性的大小调整各个 NSTableCellView View 的大小。

因此,我需要执行以下操作:

  1. 获取表格单元格 View 中 NSTextField 的frameSize。
  2. 将 NSTableCellView 的frameSize设置为NSTextField的frameSize(我们在第一组中得到的)

但是,这种方法并没有奏效。我开始认为我调整 NSTableCellView 大小的方法是不正确的。这是我一直在使用的代码:

[tableCellView setFrameSize:[[tableCellView textField] frame].size];
[tableCellView setNeedsDisplay:YES];

这个方法有问题吗?我希望单元格能够调整大小,但事实并非如此?出了什么问题?

谢谢。

最佳答案

[编辑] 我应该首先评论一下,textField 的大小与显示其所有内容所需的大小几乎没有关系。

我使用此代码根据表格单元格的宽度确定字符串的高度:

- (CGFloat) displayStringHeightWithWidth:(CGFloat)width
{
CGSize size = NSMakeSize(width,0);
NSRect bounds = [self.displayString boundingRectWithSize:size
options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading];
return bounds.size.height;
}

理想情况下,您可以调整它以查找 textField.stringValue 或 textField.attributedStringValue 的高度。并不是说上面的内容也来自 OSX,而​​不是 iOS,所以 YMMV 上有一些废话。

因此,您的算法将更改为:

  1. 获取表格列的宽度
  2. 获取文本字段文本所需边界矩形的高度
  3. 告诉 tableView 行高是你在 2 中找到的值
现在。关于#3。我相信您 必须在 NSTableViewDelegate 协议(protocol)中使用 tableView:heightOfRow: 并调用表的 noteHeightOfRowsWithIndexesChanged: 来更改行高。 tableView 不会意识到单元格的高度已更改。请注意讨论 in the documentation 。您的方法可能无需委托(delegate)即可工作,只需告诉表您要更改的行的行高是脏的......但我真的不希望它发生。

关于objective-c - 如何根据 NSTextField 的大小来调整 NSTableCellView 的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22548827/

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