Réponses:
UIView
les frères et sœurs sont empilés dans l'ordre dans lequel ils sont ajoutés à leur vue d'ensemble. Les UIView
méthodes et propriétés de hiérarchie sont là pour gérer l'ordre des vues. Dans 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;
Les vues frères sont ordonnées de l'arrière vers l'avant dans le subviews
tableau. La vue la plus haute sera donc:
[parentView.subviews lastObject];
et la vue de dessous sera:
[parentView.subviews objectAtIndex:0];
Comme l'a dit Kolin Krewinkel, [parentView bringSubviewToFront:view]
cela amènera la vue au sommet, mais ce n'est le cas que si les vues sont toutes des frères et sœurs de la hiérarchie.
Vous pouvez utiliser la zPosition
propriété du calque de la vue (c'est un CALayer
objet) pour modifier le z-index de la vue.
theView.layer.zPosition = 1;
Comme l'a ajouté Viktor Nordling , "les grandes valeurs sont au top. Vous pouvez utiliser toutes les valeurs que vous voulez, y compris les valeurs négatives." La valeur par défaut est 0.
Vous devez importer le framework QuartzCore pour accéder au calque. Ajoutez simplement cette ligne de code en haut de votre fichier d'implémentation.
#import "QuartzCore/QuartzCore.h"
zPosition
œuvres fonctionnent?
IB et Swift
Étant donné la disposition fluide où le jaune est la vue d'ensemble et le rouge, le vert et le bleu sont des sous-vues frères du jaune,
l'objectif est de déplacer une sous-vue (disons verte) vers le haut.
Dans l'Interface Builder, il vous suffit de faire glisser la vue que vous souhaitez afficher du haut vers le bas de la liste dans le plan des documents.
Vous pouvez également sélectionner la vue, puis dans le menu, accédez à Editeur> Réorganiser> Envoyer au premier plan .
Il existe plusieurs façons de procéder par programmation.
Méthode 1
yellowView.bringSubviewToFront(greenView)
Cette méthode est l'équivalent programmatique de la réponse IB ci-dessus.
Cela ne fonctionne que si les sous-vues sont des frères et sœurs les uns des autres.
Un tableau des sous-vues est contenu dans yellowView.subviews
. Ici, bringSubviewToFront
déplace l' greenView
index de 0
vers 2
. Cela peut être observé avec
print(yellowView.subviews.indexOf(greenView))
Méthode 2
greenView.layer.zPosition = 1
0
pour toutes les autres vues, le résultat est que l' greenView
apparence est en haut. Cependant, il reste toujours à l'index 0
du yellowView.subviews
tableau. Cependant, cela peut entraîner des résultats inattendus, car des éléments tels que les événements tap iront toujours en premier à la vue avec le numéro d'index le plus élevé. Pour cette raison, il pourrait être préférable d'utiliser la méthode 1 ci-dessus.zPosition
pourrait être défini sur CGFloat.greatestFiniteMagnitude
( CGFloat(FLT_MAX)
dans les anciennes versions de Swift) pour s'assurer qu'il est au top.[parentView bringSubviewToFront:view] ;
Dans la vue que vous souhaitez mettre en haut ... (en rapide)
superview?.bringSubviewToFront(self)
Si vous utilisez cocos2d, vous pouvez voir un problème avec [parentView bringSubviewToFront: view], au moins cela ne fonctionnait pas pour moi. Au lieu de mettre la vue que je voulais au premier plan, je renvoie les autres vues et cela a fait l'affaire.
[[[CCDirector sharedDirector] view] sendSubviewToBack:((UIButton *) button)];
Nous pouvons utiliser zPosition dans ios
si nous avons une vue nommée salonDetailView,
par exemple:@IBOutlet weak var salonDetailView: UIView!
et avoir UIView pour GMSMapView,
par exemple:@IBOutlet weak var mapViewUI: GMSMapView!
Pour afficher la vue salonDetailView en haut de la carteViewUI
utilisez zPosition comme ci-dessous
salonDetailView.layer.zPosition = 1