Antworten:
UIView
Geschwister werden in der Reihenfolge gestapelt, in der sie zu ihrer Übersicht hinzugefügt werden. Die UIView
Hierarchiemethoden und -eigenschaften dienen zum Verwalten der Ansichtsreihenfolge. In UIView.h:
@property(nonatomic,readonly) UIView *superview;
@property(nonatomic,readonly,copy) NSArray *subviews;
- (void)removeFromSuperview;
- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index;
- (void)exchangeSubviewAtIndex:(NSInteger)index1 withSubviewAtIndex:(NSInteger)index2;
- (void)addSubview:(UIView *)view;
- (void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview;
- (void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview;
- (void)bringSubviewToFront:(UIView *)view;
- (void)sendSubviewToBack:(UIView *)view;
Die Geschwisteransichten sind im subviews
Array von hinten nach vorne angeordnet. Die oberste Ansicht ist also:
[parentView.subviews lastObject];
und Ansicht von unten wird sein:
[parentView.subviews objectAtIndex:0];
Wie Kolin Krewinkel sagte, [parentView bringSubviewToFront:view]
wird die Ansicht nach oben bringen, aber dies ist nur der Fall, wenn die Ansichten alle Geschwister in der Hierarchie sind.
Sie können die zPosition
Eigenschaft der Ebene der Ansicht (es ist ein CALayer
Objekt) verwenden, um den Z-Index der Ansicht zu ändern.
theView.layer.zPosition = 1;
Als Viktor Nordling fügte hinzu : „große Werte auf der linken Seite . Sie alle Werte verwenden , können Sie, auch negative Werte wollen.“ Der Standardwert ist 0.
Sie müssen das QuartzCore-Framework importieren, um auf die Ebene zugreifen zu können. Fügen Sie einfach diese Codezeile oben in Ihre Implementierungsdatei ein.
#import "QuartzCore/QuartzCore.h"
zPosition
Arbeiten ausgeführt werden können?
IB und Swift
Angesichts des fließenden Layouts, in dem Gelb die Übersicht ist und Rot, Grün und Blau Geschwister-Unteransichten von Gelb sind,
Das Ziel ist es, eine Unteransicht (sagen wir grün) nach oben zu verschieben.
Im Interface Builder müssen Sie lediglich die Ansicht, die oben angezeigt werden soll, an den unteren Rand der Liste in der Dokumentübersicht ziehen.
Alternativ können Sie die Ansicht auswählen und dann im Menü zu Editor> Anordnen> Nach vorne senden gehen .
Es gibt verschiedene Möglichkeiten, dies programmgesteuert zu tun.
Methode 1
yellowView.bringSubviewToFront(greenView)
Diese Methode ist das programmatische Äquivalent der obigen IB-Antwort.
Es funktioniert nur, wenn die Unteransichten Geschwister voneinander sind.
Ein Array der Unteransichten ist in enthalten yellowView.subviews
. Hier wird bringSubviewToFront
der greenView
von Index 0
nach verschoben 2
. Dies kann mit beobachtet werden
print(yellowView.subviews.indexOf(greenView))
Methode 2
greenView.layer.zPosition = 1
0
für alle anderen Ansichten gilt, greenView
sieht das Ergebnis so aus, als ob es oben liegt. Es bleibt jedoch weiterhin im Index 0
des yellowView.subviews
Arrays. Dies kann jedoch zu unerwarteten Ergebnissen führen, da Dinge wie Tippereignisse immer noch zuerst in die Ansicht mit der höchsten Indexnummer gelangen. Aus diesem Grund ist es möglicherweise besser, mit Methode 1 oben fortzufahren.zPosition
könnte auf CGFloat.greatestFiniteMagnitude
( CGFloat(FLT_MAX)
in älteren Versionen von Swift) gesetzt werden, um sicherzustellen, dass es oben ist.[parentView bringSubviewToFront:view] ;
Innerhalb der Ansicht möchten Sie nach oben bringen ... (in schnell)
superview?.bringSubviewToFront(self)
Wenn Sie cocos2d verwenden, tritt möglicherweise ein Problem mit [parentView bringSubviewToFront: view] auf, zumindest hat es bei mir nicht funktioniert. Anstatt die gewünschte Ansicht nach vorne zu bringen, sende ich die anderen Ansichten zurück und das hat den Trick getan.
[[[CCDirector sharedDirector] view] sendSubviewToBack:((UIButton *) button)];
Wir können zPosition in ios verwenden
Wenn wir eine Ansicht mit dem Namen salonDetailView haben,
z.@IBOutlet weak var salonDetailView: UIView!
und haben UIView für GMSMapView
zB:@IBOutlet weak var mapViewUI: GMSMapView!
Anzeigen der Ansicht salonDetailView oben in der mapViewUI
Verwenden Sie zPosition wie folgt
salonDetailView.layer.zPosition = 1