我需要NSTableView的和動態的行高一點點幫助基於視圖的NSTableView的,讓行高度依賴於內容
我有什麼:基於視圖
單列NSTableView的綁定到陣列控制器。每個NSTableCellView包含三個子視圖:NSImageView,NSTextField(單行)和NSTextField(多行)。基本上,這是一個聊天界面,所以你會有一個消息,發件人和頭像列表。
我想要什麼來實現的:
當文本比該行的最小高度更長的時間,該行擴展以適應內容。就像iMessage一樣,氣泡也會擴展以適應消息。
......這似乎是一件非常自然的事情,但在我找到的所有相關解決方案中,(Ref 1,Ref 2),其中沒有一個適合我。
參考文獻2看起來飛馳的書面但沒有適用於我的應用程序,因爲示例項目使用第三方自動佈局代碼和整個事情是專爲iOS。參考文獻1給出了一個非常有希望的解決方案,用英文寫成。我嘗試使用解決方案中描述的「虛擬視圖」進行設置,但未能正確更改和測量高度。
這裏是我的代碼tableView:heightOfRow:
,_samplingView
是虛擬視圖,它具有工作約束並且與tableView
中的虛擬視圖相同。
- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row
{
NSTextField *textField;
NSTextFieldCell *messageCell;
for (NSView *subview in [_samplingView subviews]) {
if ([[subview identifier] isEqualToString:@"message"]) {
textField = (NSTextField*)subview;
messageCell = ((NSTextField*)subview).cell;
}
}
Message *message = [[_messagesArrayController arrangedObjects] objectAtIndex:row];
_samplingView.objectValue = message;
CGFloat width = [[[tableView tableColumns] objectAtIndex:1] width];
[_samplingView setBounds:NSMakeRect(0, 0, width, CGFLOAT_MAX)];
[_samplingView display];
CGFloat optimalHeight = 10 + [messageCell cellSize].height; //messageCell's size stays the same when I change samplingView to try to measure the height
return optimalHeight;
}
結果:所有行高度保持不變,不知何故當我改變的_samplingView
的寬度,它不會重新大小messageCell
的大小。我認爲自動佈局會照顧這種壓縮/擴展,並允許我測量高度。的確,我很困惑。
編輯:供參考,這是我的看法是什麼樣子
+-----------+---------------------------------------------------+
| | NSTextField |
|NSImageView| sender |
| avatar +---------------------------------------------------+
| | |
| | NSTextField (multiline) |
+-----------| message |
| | |
| | (high compression/hugging priority) |
| | (this view should decide the height of row) |
| | |
+-----------+---------------------------------------------------+
你有沒有找到解決方案? –
@Jai,我刺傷了它。 – stevesliva