2

から継承するカスタム ボタンにAutolayout制約を適用しようとしていますNSView。ボタンはかなり複雑で、たとえばラジオ ボタンとして使用できます。ユーザー インターフェイスはdrawRect:、次のコードの抜粋から推測できるように構成されています。

@interface CustomButton : NSView

...

- (void)drawRect:(NSRect)dirtyRect {
    // ...
    if (self.hasImage) {
        // ...
        if (self.hasTitle) {
            // ...
            [image drawInRect:imgRect
                     fromRect:NSZeroRect
                    operation:NSCompositeSourceOver
                     fraction:fraction
                    alignment:Alignment_LEFT];
        } else {
            [image drawInRect:imgRect
                     fromRect:NSZeroRect
                    operation:NSCompositeSourceOver
                     fraction:fraction
                    alignment:Alignment_CENTER];
        }
    }
    if (self.hasTitle) {
        // ...
        [self.textRenderer drawText:m_title
                         inRect:textRect
                      withState:state
                    controlView:self];
    }
}

NSView から派生したカスタム テキスト フィールドを正常に構成しました。違いは、テキスト フィールドがaddSubView:そのユーザー インターフェイス コンポーネントを構成するために使用されることです。

Autolayout 制約を使用してユーザー インターフェイス コンポーネントを配置することはまだ可能でしょうか。現時点では、コンポーネントは表示されません。それらの「サブビュー」を描いているので、うまくいかない気がします。

4

1 に答える 1

2

intrinsicContentSizeinを実装することで問題を解決できましたCustomButton

#pragma mark - NSConstraintBasedLayoutFittingSize

/**
    Returns a suitable size for the receiver.
    This settings may not apply if a layout constraint
    defines minimum values for the width or height of the element.
    @returns A size for the receiver.
 */
- (NSSize)intrinsicContentSize {
    // Calculation of width and height of the rendered text.
    return NSMakeSize(width, height);
}
于 2012-10-23T16:10:47.287 に答える