Автоматически изменяет размер NSButton, чтобы соответствовать программно измененному тексту (Xcode) - PullRequest
12 голосов
/ 27 августа 2011

У меня есть NSButton (кнопка) с некоторым временным текстом заголовка, встроенным в Interface Builder / Xcode.В других местах текст заголовка внутри кнопки программно изменяется на строку неизвестной длины (на самом деле, много раз на много разных длин).

Я бы хотел, чтобы размер кнопки автоматически изменялся (с фиксированной правой позицией- так он растет слева), чтобы соответствовать любой длине строки, программно вставленной как текст кнопки.Но я не могу понять это.Какие-либо предложения?Заранее спасибо!

Ответы [ 2 ]

15 голосов
/ 27 августа 2011

Если вы не можете использовать автоматическую компоновку в соответствии с предложением @jtbandes (она доступна только в Lion), тогда вы можете вызвать [button sizeToFit] после установки значения строки, что приведет к изменению размера кнопки в соответствии с ее строкой.Затем вам нужно будет настроить его рамку на основе новой ширины.

Вы не можете сделать это автоматически, но это будет легко сделать в подклассе NSButton.

@implementation RKSizeToFitButton
- (void)setStringValue:(NSString*)aString
{
    //get the current frame
    NSRect frame = [self frame];

    //button label
    [super setStringValue:aString];

    //resize to fit the new string
    [self sizeToFit];

    //calculate the difference between the two frame widths
    NSSize newSize = self.frame.size;
    CGFloat widthDelta = newSize.width - NSWidth(frame);
    //set the frame origin
    [self setFrameOrigin:NSMakePoint(NSMinX(self.frame) - widthDelta, NSMinY(self.frame))];
}
@end

Таким образом, вы можете просто установить класс кнопки на RKSizeToFitButton в Интерфейсном Разработчике, а затем вызвать setStringValue: на кнопке, чтобы изменить ее метку, "просто будет работать" без дополнительного кода.

8 голосов
/ 27 августа 2011

Конечно!Просто используйте Auto Layout !:)

...