Ich hatte einen meiner Kollegen heute mit einem Problem zu mir kommen, wie kann er laden oder view-swap documentView
von NSScrollView
, so dass die geladene Ansicht erscheint fix an der oberen linken Ecke anstelle der unteren Ecke.Einstellung NSScrollView Inhalt oben links statt unten links beim Dokumentwechsel
Er hatte eine Weile im Internet gesucht und herumgetrottet und hatte keine Lösung, obwohl er die Dokumentation bei Apple, StackOverflow und anderen Orten gelesen hatte.
Hier ist das Problem Stück-für-Stück:
In Interface Builder ziehen Sie ein NSScrollView
in das Projekt. auch im Interface Builder ziehen zwei benutzerdefinierte Ansichten in das Projekt und fügen Sie einige Textfelder, Schaltflächen usw.
eine Controller-Klasse erstellen (zB MyController) mit folgenden IBOutlet
s:
IBOutlet NSScrollView * myScrollView
IBOutlet NSView * myCustomView1
IBOutlet NSView * myCustomView2
den Auslässen der CONNECT Steuerelemente im Interface Builder.
Eine NSView
Unterklasse der documentView
Flip:
@implementation myFlippedView
-(id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self) {
// Initialization code here.
}
return self;
}
-(void)drawRect:(NSRect)dirtyRect {
// Drawing code here.
}
-(BOOL)isFlipped {
return YES;
}
Wählen Sie die documentView
des NSScrollView
im Interface Builder und es eine Unterklasse von myFlippedView
machen. In Interface Builder würden Sie die NSScrollView auswählen und dann erneut darauf klicken, um zur documentView
zu gelangen, oder die IB-Bibliothek ändern, um eine Strukturansicht anzuzeigen und die untergeordnete benutzerdefinierte Ansicht von NSScrollView
auszuwählen.
Im myController
Klasse tauscht die Ansichten mit den folgenden Methoden:
-(void)awakeFromNib {
[myScrollView setDocumentView:myCustomView1];
}
-(IBAction)swapViews:(id)sender {
if ([myScrollView documentView] == myCustomView1) {
[myScrollView setDocumentView:myCustomView2];
} else {
[myScrollView setDocumentView:myCustomView1];
}
}
schließlich eine Schaltfläche in einem Projekt der Aktion swapViews
anschließen, erstellen und ausführen.
Das Problem ist, dass die Koordinaten nicht aufgelöst wurden, wie es mit dem IsFlipped erwartet wurde.
Oder Sie könnten die einfachere Route gehen und die getauschten Ansichten nur eine Unteransicht der myFlippedView machen, anstatt sie zur Dokumentansicht zu machen. – ughoavgfhw
Das könnte man. Guter Punkt. – Hooligancat
Dies führt jedoch zu einem neuen Problem. Wenn Sie die Bildlaufansicht durch Größenänderung eines Fensters kleiner als die Dokumentansicht machen, wird sie an den unteren Rand der Ansicht angefügt und nicht an den Anfang. Als Benutzer erwartet man Letzteres. –