Если вы не можете использовать автоматическую компоновку в соответствии с предложением @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:
на кнопке, чтобы изменить ее метку, "просто будет работать" без дополнительного кода.