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.