Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
578 views
in Technique[技术] by (71.8m points)

objective c - NSTableView Row Height based on NSStrings

Basically, I have an NSTableView with 1 collumn, and I'm inserting long strings into each row. However, not all the strings are long, so I'd like the height of each row to be different based on how long the string is.

I've figured out that I need to ask the collumn how wide it is, and then ask the string how many lines it will take up if the collumn is that wide, and then decide how "tall" the NSCell will be. But how exactly do I go about doing that? I've gotten the collumn width from:

[[[tableView tableColumns] objectAtIndex:0] width];

but I can't figure out how to ask the NSString how much space it will take up. Or, perhaps, there is a better way that I should go about doing this?

Thanks for any help in advance.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Create an NSTextFieldCell instance and match its font/size/etc. to that of your column's data cell. Ask it for the -cellSizeForBounds:, passing in a rect of the desired width for the column, with a large height (FLT_MAX?). The result should be an NSSize whose height you can use.

It gets trickier if you have more than one multi-line text column because you'll need to consider all the cells in that row, taking the largest as your row height. If you expect a lot of rows on average, you'll probably want to cache this work, updating it as necessary, then simply referencing it when the row height delegate method is called.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...