Как установить высоту строки на основе ее содержимого в таблице?

Как правило, таблица имеет фиксированную высоту строки, но в соответствии с моими требованиями мне нужно установить высоту каждой строки в соответствии с ее содержимым.

Может ли кто-нибудь предложить мне какое-то решение для этого?

Спасибо,

Мирадж


person Devarshi    schedule 05.07.2010    source источник


Ответы (2)


Протокол делегата табличного представления имеет tableView:heightOfRow, который позволяет установить высоту каждой строки в представлении таблицы.

person dj2    schedule 05.07.2010
comment
спасибо за ваш быстрый ответ... можете ли вы предложить мне, есть ли какой-то стандартный способ вычисления высоты строки на основе ее содержимого, или мне нужно манипулировать некоторым соотношением: на основе символов в строке и ширине строки.. - person Devarshi; 05.07.2010
comment
Один раз, когда я это делал, я слушал уведомление NSViewFrameDidChangeNotification, и когда появилось мое конкретное представление, я захватил его размер кадра. Я бы сохранил размер ячейки строки и использовал метод noteHeightOfRowsWithIndexesChanged для таблицы, чтобы сообщить таблице об обновлении на основе изменения высоты этой строки. Вероятно, не лучший способ сделать это, но мне нужно было следить только за одним представлением вебкита, которое я перемещал. Вы можете увидеть код, использующий MacRuby вместо Obj-C, на github. .com/dj2/Rife/blob/master/lib/application.rb - person dj2; 06.07.2010
comment
Miraaj: Вы можете запросить у каждого столбца его ширину, и вы можете спросить строку, сколько места она займет, если начертить ее в прямоугольник заданного размера (например, прямоугольник с шириной столбца и очень большой высотой). developer.apple.com/mac/library/documentation/Cocoa/Reference/: для изображения вам придется самостоятельно произвести расчеты, используя соотношение сторон размер изображения. - person Peter Hosey; 06.07.2010

Спасибо всем за ваши предложения и помощь. Теперь эта проблема решена с помощью следующего кода в tableView:heightOfRow:

float colWidth = [[[tableView tableColumns] objectAtIndex:1]width];

NSString *content = [[[tempArray objectAtIndex:row] objectForKey:@"tValue"] string];

float textWidth = [content sizeWithAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[NSFont fontWithName:@"Lucida Grande" size:15],NSFontAttributeName ,nil]].width;

float newHeight = ceil(textWidth/colWidth);

newHeight = (newHeight * 17) + 13;
if(newHeight < 47){
    return 47;
}   
return newHeight;
person Devarshi    schedule 14.07.2010