Ich habe im Inspektor gesehen, dass ich die Hintergrundfarbe ändern kann, aber ich möchte auch die Rahmenfarbe und -stärke ändern. Ist dies möglich?
275
Ich habe im Inspektor gesehen, dass ich die Hintergrundfarbe ändern kann, aber ich möchte auch die Rahmenfarbe und -stärke ändern. Ist dies möglich?
Antworten:
Sie müssen die Ebene der Ansicht verwenden, um die Rahmeneigenschaft festzulegen. z.B:
Sie müssen auch eine Verknüpfung mit QuartzCore.framework herstellen, um auf diese Funktionalität zugreifen zu können.
quelle
__bridge CGColorRef
. Das funktioniert nicht. Es muss[UIColor blackColor].CGColor
wie in der Antwort erwähnt sein.#import <QuartzCore/QuartzCore.h>
wird nicht mehr benötigt.Xcode 6 Update
Seit der neuesten Version von Xcode gibt es eine bessere Lösung dafür:
Mit
@IBInspectable
Ihnen Attribute direkt aus einstellen können innerhalb derAttributes Inspector
.Dies legt das
User Defined Runtime Attributes
für Sie fest:Es gibt zwei Ansätze, um dies einzurichten:
Option 1 (mit Live-Aktualisierung im Storyboard)
MyCustomView
.UIView
.@IBDesignable
(dadurch wird das View-Update live geschaltet). *@IBInspectable
MyCustomView
`
*
@IBDesignable
funktioniert nur, wenn zu Beginn eingestelltclass MyCustomView
Option 2 (funktioniert seit Swift 1.2 nicht mehr, siehe Kommentare)
Erweitern Sie Ihre UIView-Klasse:
Auf diese Weise enthält Ihre Standardansicht immer diese zusätzlichen bearbeitbaren Felder
Attributes Inspector
. Ein weiterer Vorteil ist, dass Sie die Klasse nichtMycustomView
jedes Mal ändern müssen . Ein Nachteil dabei ist jedoch, dass Sie Ihre Änderungen nur sehen, wenn Sie Ihre App ausführen.quelle
Sie können auch einen Rahmen mit der Farbe Ihres Wunsches erstellen.
* r, g, b sind die Werte zwischen 0 und 255.
quelle
r
,g
undb
sollte wahrscheinlich Floats sein; Die Teiler sollten auch Schwimmer sein :r / 255.0
.Fügen Sie in der UIView-Erweiterung die folgenden @IBInspectables hinzu
Anschließend sollten Sie in der Lage sein, die Attribute borderColor und borderWidth direkt im Attributinspektor festzulegen. Siehe beigefügtes Bild
Attributinspektor
quelle
Wenn ich die CALayer-Lösung von Vladimir verwende und oben in der Ansicht eine Animation wie ein modaler UINavigationController angezeigt wird, treten viele Störungen auf und es treten Probleme mit der Zeichnungsleistung auf.
Eine andere Möglichkeit, dies zu erreichen, ohne dass es zu Störungen und Leistungseinbußen kommt, besteht darin, eine benutzerdefinierte UIView zu erstellen und die
drawRect
Nachricht folgendermaßen zu implementieren :quelle
setNeedsDisplay
die Ansicht auf. Dadurch wird das Neuzeichnen des UIView erzwungen und implizit erneut aufgerufendrawRect
. Nicht getestet, obwohl ...quelle
Versuchen Sie diesen Code:
quelle
Ich würde nicht empfehlen, drawRect zu überschreiben, da dies zu einem Leistungseinbruch führt.
Stattdessen würde ich die Eigenschaften der Klasse wie folgt ändern (in Ihrer benutzerdefinierten Ansicht):
Ich habe bei der obigen Vorgehensweise keine Störungen gesehen - ich bin mir nicht sicher, warum das Einfügen des initWithFrame diese stoppt ;-)
quelle
Ich wollte dies als Kommentar zu @ marczkings Antwort ( Option 1 ) hinzufügen , aber mein niedriger Status bei StackOverflow verhindert dies.
Ich habe eine Portierung von @ marczkings Antwort auf Ziel C gemacht. Funktioniert wie Charme, danke @marczking!
UIView + Border.h:
UIView + Border.m:
quelle
@IBInspectable arbeitet für mich unter iOS 9, Swift 2.0
quelle
Wenn Sie die Ebene einer UIView nicht bearbeiten möchten, können Sie die Ansicht jederzeit in eine andere Ansicht einbetten. In der übergeordneten Ansicht wird die Hintergrundfarbe auf die Rahmenfarbe festgelegt. Es wäre auch etwas größer, je nachdem, wie breit der Rand sein soll.
Dies funktioniert natürlich nur, wenn Ihre Ansicht nicht transparent ist und Sie nur eine einzige Rahmenfarbe wünschen. Das OP wollte die Grenze in der Ansicht selbst, aber dies könnte eine praktikable Alternative sein.
quelle
Wenn Sie auf verschiedenen Seiten unterschiedliche Rahmen hinzufügen möchten, ist es möglicherweise einfach, eine Unteransicht mit dem spezifischen Stil hinzuzufügen.
quelle
Randfarbe des Elements in Swift 4.2:
quelle