Не удается автоматически изменить размер NSTextField в NSView (как пункт меню) - PullRequest
2 голосов
/ 13 марта 2011

Я неопытный пользователь, пытающийся учиться с помощью простого процесса создания проектов ... Я прошу вашей помощи, поскольку уже два дня не могу найти работающее решение, копая Справку Xcode и Google .

У меня есть простое приложение MacOS X (10.6.x), которое создает (в коде) дополнительный NSMenuItem в меню строки состояния XIB. На моем AppDelegate я создаю объект, который загружает NSView (из MainMenu.xib):

// Add menu entry for NSView object
NSMenuItem* newItem = [[NSMenuItem alloc] initWithTitle:@"Placeholder"
                                        action:nil
                                        keyEquivalent:@""];
[newItem setView:theView];
[newItem setEnabled:NO];
[newItem setTarget:self];
[calendarMenu insertItem: newItem atIndex:0];
[newItem release];

В моем MainMenu.xib, кроме структуры меню, у меня есть еще один объект, установленный как NSView и под ним, NSTextField (занимающий все пространство представления). Кажется, меню загружает окно просмотра.

Позже я установил некоторую строку в NSTextField, но не могу соответствующим образом отрегулировать высоту; это либо слишком много, либо урожай:

// Crop last newline character
NSString *menuCelebrations = [NSString stringWithString:
        [celebName substringToIndex:([celebName length] - 1)]];
NSFont *msgFont = [NSFont menuBarFontOfSize:12.0];

// Set attributes
[theTextField setFont:msgFont];
[theTextField setStringValue:menuCelebrations];

В верхнем меню теперь отображается более длинный текст, который я хочу, обернуть и т. Д., Но я не могу правильно отрегулировать высоту, например:

theView setFrame: NSMakeRect([theView frame].origin.x,
            [theView frame].origin.y,
            calendarMenu.size.width,
            newHeightFloat)];

Как новичок, я пробовал подобные вещи для автоматического изменения размера, но безрезультатно:

[theTextField sizeToFit];
[theTextField autoresizesSubviews];
[theView setAutoresizingMask:NSViewHeightSizable];
[theView setNeedsDisplay:YES];

Само собой разумеется, что я пробовал многочисленные комбинации атрибутов в Интерфейсном Разработчике (где текстовое поле изменяется с представлением и т. Д.). Ничего не помогло ... Я до сих пор не могу найти способ вычислить и установить высоту для NSView или NSTextFieled, который является подобъектом.

Я нашел идеи и код здесь на www.stackoverflow.com и www.cocoabuilder.com , но люди упоминают об использовании NSLayoutManager, NSTextStorage и NSTextContainer, которые Apple предлагает где-то в документация (см. главу / справку «Расчет высоты текста», в которой есть некоторый код, но она не может быть реализована); другие предполагают, что Apple рассчитывает блок, но при рендеринге этого блока пропускаются некоторые пиксели внизу.

A ссылка на работу Мэтта Нойбурга (вместо NSLayout, которую предлагает Apple), которая делает правильный расчет (с примером проекта), кажется, работает хорошо, но на объектах NSTextView ...

Должен ли я создать отдельный / пользовательский класс для этого NSView? Должен ли я предпочесть NSTextView NSTextField?

Кому-нибудь удалось отрегулировать высоту (только) до нужного размера? Я, безусловно, был бы признателен за помощь с примером кода.

Я копаю слишком глубоко, не понимая методов на месте?

...