2013-03-19 6 views
21

Ich habe ein UIView, in dem ich definiere es Grenze in der folgenden Art und Weise ist:Subview erscheint unter Superviews layer.border?

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

Ich lege eine Subview auf diesen UIView, und wenn ich die Subview über die Grenze zu bewegen, geht es darunter. Ist das das beabsichtigte Verhalten? Gibt es überhaupt eine Möglichkeit, die Unteransicht auf den Kopf zu stellen?

+1

Der Apple Doc sagte 'Der Rahmen wird von den Grenzen des Empfängers um den in dieser Eigenschaft angegebenen Wert eingezeichnet. Es wird über dem Inhalt und den Sublayern des Empfängers zusammengesetzt, so dass der Rahmen oben auf Ihrer Ebene liegt (einschließlich Ihrer Unterschicht) –

+0

Guten Hinweis @GuoLuchuan! Vielleicht BackGround Bild über Overlay verwenden eine andere UIView –

+0

@ aaâ ja Sie sind richtig, machen Sie eine Hintergrundansicht fälschen die Grenze kann damit umgehen. vielleicht hat jemand anders einen perfekten Weg damit umzugehen. Und wir dachten auch, ob es einen perfekten Weg gibt –

Antwort

29

Nach dem Apple specification: It is composited above the receiver’s contents and sublayers.

die Grenze wird also immer über alle Ihre Subviews, auch wenn Sie Ihre Subview nach vorne bringen und so weiter.

Also mache ich eine Hintergrundansicht, um die Grenze zu fälschen.

Z. B .:

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]; 

und die Wirkung:

enter image description here

+0

Ich denke auch, dass eine Ansicht erstellt werden kann, die die Rahmenansicht enthält, und die Ansicht, die als Teilansichten darauf gehen soll, und dann sicherstellen, dass die Rahmenansicht zuerst angehängt wird. –

+0

@StackOverFlowRider Ja, Sie können eine 'CustomView' erstellen, und ihre .'view' ist die' Grenze', und 'CustomView' hat eine' UIView' Eigenschaft mit dem Namen 'yourView'. die 'yourView' ist Ihre wirklich nützliche Ansicht, und' yourView' ist eine 'subview' von' CustomView'.view' –

+0

Danke für diese Antwort übrigens. –

0

Haben Sie versucht, die Eigenschaft 'clipsToBounds' des Superviews auf YES zu setzen? Dies ist aus Leistungsgründen standardmäßig auf NO eingestellt, aber wenn Sie es auf "Yes" setzen, erhalten Sie möglicherweise den gewünschten Effekt.

+0

Ich brauche es auf Nein eingestellt zu sein, weil diese Ansicht außerhalb seiner Superviews Grenzen geht. –

0

auf Ihrer Ansicht Struktur Je könnte es einfacher sein, die Subview die Eltern Ihre Hauptansicht hinzuzufügen. Es kann dann die Hauptansicht überlappen und wird die Grenze wie gewünscht überlagern.

Verwandte Themen