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