Autolayout-Einschränkungen funktionieren für NSView-Kompositionen mit drawRect nicht:

Ich versuche mich zu bewerbenAutolayout Einschränkungen für eine benutzerdefinierte Schaltfläche, von der erbtNSView. Die Schaltfläche ist recht komplex und kann beispielsweise als Optionsfeld verwendet werden. Die Benutzeroberfläche besteht ausdrawRect: Wie Sie aus dem folgenden Code-Auszug erraten können.

@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];
    }
}

Ich habe erfolgreich ein benutzerdefiniertes Textfeld konfiguriert, das von NSView abgeleitet ist. Der Unterschied besteht darin, dass das Textfeld verwendetaddSubView: Komponenten der Benutzeroberfläche zu komponieren.

Ich frage mich, ob es noch möglich ist, Autolayout-Einschränkungen zum Positionieren der Benutzeroberflächenkomponenten zu verwenden. Im Moment zeigt sich keine Komponente. Ich habe das Gefühl, dass es nicht funktioniert, weil ich diese "Subviews" zeichne.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage