Respuestas:
UIView
los hermanos se apilan en el orden en que se agregan a su supervista. Los UIView
métodos y propiedades de la jerarquía están ahí para administrar el orden de las vistas. En 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;
Las vistas entre hermanos se ordenan de atrás hacia adelante en la subviews
matriz. Entonces la vista más alta será:
[parentView.subviews lastObject];
y la vista inferior será:
[parentView.subviews objectAtIndex:0];
Como dijo Kolin Krewinkel, [parentView bringSubviewToFront:view]
llevará la vista a la cima, pero este es solo el caso si las vistas son todas hermanas en la jerarquía.
Puede usar la zPosition
propiedad de la capa de la vista (es un CALayer
objeto) para cambiar el índice z de la vista.
theView.layer.zPosition = 1;
Como agregó Viktor Nordling , "los valores grandes están en la parte superior. Puede usar los valores que desee, incluidos los valores negativos". El valor predeterminado es 0.
Debe importar el marco QuartzCore para acceder a la capa. Simplemente agregue esta línea de código en la parte superior de su archivo de implementación.
#import "QuartzCore/QuartzCore.h"
zPosition
trabajos?
IB y Swift
Dado el diseño fluido en el que el amarillo es la supervista y el rojo, el verde y el azul son subvistas entre hermanos del amarillo,
El objetivo es mover una subvista (digamos verde) a la parte superior.
En el Creador de interfaces, todo lo que necesita hacer es arrastrar la vista que desea mostrar en la parte superior al final de la lista en el Esquema de documentos.
Alternativamente, puede seleccionar la vista y luego en el menú ir a Editor> Organizar> Enviar al frente .
Hay un par de formas diferentes de hacer esto mediante programación.
Método 1
yellowView.bringSubviewToFront(greenView)
Este método es el equivalente programático de la respuesta IB anterior.
Solo funciona si las subvistas son hermanos entre sí.
Una matriz de las subvistas está contenida en yellowView.subviews
. Aquí, bringSubviewToFront
mueve el greenView
índice 0
a 2
. Esto se puede observar con
print(yellowView.subviews.indexOf(greenView))
Método 2
greenView.layer.zPosition = 1
0
para todas las demás vistas, el resultado es que greenView
parece que está en la parte superior. Sin embargo, todavía permanece en el índice 0
de la yellowView.subviews
matriz. Sin embargo, esto puede causar algunos resultados inesperados, porque cosas como los eventos de tap todavía irán primero a la vista con el número de índice más alto. Por esa razón, podría ser mejor ir con el Método 1 anterior.zPosition
podría establecer en CGFloat.greatestFiniteMagnitude
( CGFloat(FLT_MAX)
en versiones anteriores de Swift) para garantizar que esté en la parte superior.[parentView bringSubviewToFront:view] ;
Dentro de la vista que desea llevar a la cima ... (en forma rápida)
superview?.bringSubviewToFront(self)
Si está utilizando cocos2d, puede ver un problema con [parentView bringSubviewToFront: view], al menos no me funcionaba. En lugar de traer la vista que quería al frente, envié las otras vistas y eso funcionó.
[[[CCDirector sharedDirector] view] sendSubviewToBack:((UIButton *) button)];
Podemos usar zPosition en ios
si tenemos una vista llamada salonDetailView,
por ejemplo:@IBOutlet weak var salonDetailView: UIView!
y tener UIView para GMSMapView,
por ejemplo:@IBOutlet weak var mapViewUI: GMSMapView!
Para mostrar la vista salonDetailView superior del mapaViewUI
use zPosition como se muestra a continuación
salonDetailView.layer.zPosition = 1