2013-03-19 14 views
21

Ho un UIView in cui io definisco che è confine nel modo seguente:Sottomenu appare sotto supervisioni layer.border?

self.layer.borderColor = [UIColor blackColor].CGColor; 
    self.layer.borderWidth = 3; 

ho allegare una visualizzazione secondaria a questo UIView, e quando mi muovo la visualizzazione secondaria oltre il confine, si va sotto di esso. È questo il comportamento previsto? C'è comunque un modo per far sì che la sottoview vada avanti?

+1

Il documento della mela diceva "Il bordo è disegnato all'interno dai limiti del destinatario per il valore specificato in questa proprietà. È composto sopra i contenuti e i sottotitoli del destinatario, in modo che il bordo si trovi in ​​cima al tuo livello (includi il sottolivello) –

+0

Buon suggerimento @GuoLuchuan! Forse usare l'immagine backGround per sovrapporre un'altra UIView –

+0

@ aaâ sì, hai ragione, crea una vista di sfondo che il bordo può gestire. forse qualcun altro ha un modo perfetto per gestirlo. E abbiamo anche pensato se c'è un modo perfetto –

risposta

29

Secondo il Apple specification: It is composited above the receiver’s contents and sublayers.

Quindi, il bordo sarà sempre al di sopra di tutte le vostre subviews, anche se voi portate il vostro visualizzazione secondaria per la parte anteriore e così via.

Quindi faccio una vista di sfondo per simulare il confine.

Es .:

UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)]; 
backgroundView.backgroundColor = [UIColor blackColor]; 
backgroundView.clipsToBounds = NO; 

UIView *bView = [[UIView alloc] initWithFrame:CGRectInset(backgroundView.bounds, 3, 3)]; 
bView.backgroundColor = [UIColor redColor]; 

UIView *cView = [[UIView alloc] initWithFrame:CGRectMake(-50, -50, 100, 100)]; 
cView.backgroundColor = [UIColor yellowColor]; 
[bView addSubview:cView]; 

[backgroundView addSubview:bView]; 

[self.window addSubview:backgroundView]; 

e l'effetto:

enter image description here

+0

Penso che potrebbe anche creare una vista che contenga la vista del bordo, e la vista che si suppone vada sopra di essa come sottoview, quindi assicurarsi che la vista del bordo sia attaccata per prima. –

+0

@StackOverFlowRider yes puoi creare un 'CustomView', e il suo .'view' è il' bordo', e 'CustomView' ha una proprietà' UIView' può essere chiamato 'yourView'. il 'yourView' è la tua vera vista utile, e' yourView' è una 'sottoview' di' CustomView' .view' –

+0

Grazie per quella risposta btw. –

0

Hai provato a impostare la proprietà 'clipsToBounds' della superview su SÌ? Questo è impostato su NO per impostazione predefinita per motivi di prestazioni, ma impostandolo su Sì potrebbe darti l'effetto che stai cercando.

+0

Ho bisogno che sia impostato su no perché questa vista va oltre i suoi limiti di supervisione. –

0

A seconda della struttura di vista, potrebbe essere più facile per aggiungere la visualizzazione secondaria alla genitore di visualizzazione principale. Può quindi sovrapporsi alla vista principale e sovrapporrà il bordo come richiesto.