14

Interface Builder / Xcodeに一時的なタイトルテキストが組み込まれたNSButton(プッシュボタン)があります。他の場所では、ボタン内のタイトルテキストがプログラムで不明な長さの文字列に変更されます(実際には、多くの場合、さまざまな長さになります)。

プログラムでボタンテキストとして挿入された文字列の長さに合わせて、ボタンのサイズを自動的に変更します(右の位置が固定されているため、左に伸びます)。しかし、私はそれを理解することはできません。助言がありますか?前もって感謝します!

4

2 に答える 2

16

@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

このように、Interface Builderでボタンのクラスを設定するだけで、ボタンをRKSizeToFitButton呼び出しsetStringValue:てラベルを変更するだけで、追加のコードなしで「正常に機能」します。

于 2011-08-27T05:03:24.300 に答える
8

もちろん!自動レイアウトを使用するだけです!:)

于 2011-08-27T04:34:25.913 に答える