Wenn Sie einen Rahmen einer Ansicht mithilfe von Code in einer Ansicht wie hinzufügen
self.layer.borderColor = [UIColor yellowColor].CGColor;
self.layer.borderWidth = 2.0f;
Der Rand wird in der Ansicht wie folgt hinzugefügt:
Die rechte Ansicht ist die Originalansicht. Wie Sie sehen können, ist der schwarze Bereich der Randansicht kleiner als der Originalbereich. aber was ich bekommen möchte, ist eine Grenze außerhalb der ursprünglichen Ansicht, wie folgt : . Der schwarze Bereich entspricht dem ursprünglichen Bereich. Wie kann ich ihn implementieren?
Ok, es gibt bereits eine akzeptierte Antwort, aber ich denke, es gibt einen besseren Weg, dies zu tun. Sie müssen nur eine neue Ebene haben, die etwas größer als Ihre Ansicht ist, und sie nicht bis an die Grenzen der Ebene der Ansicht maskieren (was tatsächlich der Fall ist) das Standardverhalten). Hier ist der Beispielcode:
Dies ist natürlich der Fall, wenn Sie möchten, dass Ihr Rand 1 Einheit groß ist. Wenn Sie mehr möchten, passen Sie den
borderWidth
und den Rahmen der Ebene entsprechend an. Dies ist besser als die Verwendung einer zweiten Ansicht, die etwas größer ist, da aCALayer
leichter als a istUIView
und Sie den Rahmen von nicht ändern müssen. Dies istmyView
beispielsweise dann gut, wennmyView
es sich um a handeltUIImageView
NB: Für mich war das Ergebnis im Simulator nicht perfekt (die Schicht war nicht genau an der richtigen Position, so dass die Schicht manchmal auf einer Seite dicker war), aber genau das, was auf einem realen Gerät verlangt wird.
BEARBEITEN
Eigentlich war das Problem, über das ich in der NB spreche, nur, weil ich den Bildschirm des Simulators verkleinert hatte. Bei normaler Größe gibt es absolut kein Problem
Ich hoffe es hilft
quelle
Mit der oben akzeptierten besten Antwort habe ich Erfahrungen mit so nicht schönen Ergebnissen und unschönen Kanten gemacht:
Also werde ich meine UIView Swift- Erweiterung mit Ihnen teilen, die stattdessen einen UIBezierPath als Rahmenumriss verwendet - ohne unschöne Kanten (inspiriert von @Fattie ):
Beispiel:
quelle
Bei einer Swift-Implementierung können Sie diese als UIView-Erweiterung hinzufügen.
quelle
Nun, es gibt keine direkte Methode, um dies zu tun. Sie können einige Problemumgehungen in Betracht ziehen.
Wenn Sie keinen bestimmten Rand benötigen (eindeutiger Rand), können Sie sich für diesen Zweck auf den Schatten verlassen
quelle
Erhöhen Sie die Breite und Höhe des Rahmens der Ansicht mit der Rahmenbreite, bevor Sie den Rahmen hinzufügen:
quelle
Es gibt tatsächlich eine sehr einfache Lösung. Stellen Sie beide einfach so ein:
quelle
Ich mochte die Lösung von @picciano Wenn Sie einen explodierenden Kreis anstelle eines Quadrats möchten, ersetzen Sie die Funktion addExternalBorder durch:
quelle
Ich mochte die Lösung von @picciano & @Maksim Kniazev. Wir können auch einen ringförmigen Rand mit folgendem erstellen:
quelle
Wenn ich im Storyboard einen Rahmen um meine UI-Ansicht (main - SubscriptionAd) platziere, platziere ich ihn in einer anderen UI-Ansicht (background - BackgroundAd). Die Hintergrund-UIView hat eine Hintergrundfarbe, die der gewünschten Rahmenfarbe entspricht, und die Haupt-UIView hat von jeder Seite den Einschränkungswert 2.
Ich werde die Hintergrundansicht mit meinem ViewController verknüpfen und dann den Rahmen durch Ändern der Hintergrundfarbe ein- und ausschalten.
quelle
Swift 5
quelle