IB_DESIGNABLE, IBInspectable - Der Interface Builder wird nicht aktualisiert

91

Ich habe den folgenden Code:

CustomView.h

#import <UIKit/UIKit.h>

IB_DESIGNABLE
@interface CustomView : UIView

@property (nonatomic) IBInspectable UIColor *borderColor;
@property (nonatomic) IBInspectable CGFloat borderWidth;
@property (nonatomic) IBInspectable CGFloat cornerRadius;

@end

CustomView.m

#import "CustomView.h"

@implementation CustomView

- (void)setBorderColor:(UIColor *)borderColor {
    _borderColor = borderColor;
    self.layer.borderColor = borderColor.CGColor;
}

- (void)setBorderWidth:(CGFloat)borderWidth {
    _borderWidth = borderWidth;
    self.layer.borderWidth = borderWidth;
}

- (void)setCornerRadius:(CGFloat)cornerRadius {
    _cornerRadius = cornerRadius;
    self.layer.cornerRadius = cornerRadius;
}

@end

(Als Swift-Referenz trat dieses Problem auch beim Swift-Code auf.)

CustomView.swift

@IBDesignable
class CustomView : UIView {
    override init(frame: CGRect) {
        super.init(frame: frame)
    }

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    @IBInspectable var borderColor : UIColor = UIColor.clearColor() {
        didSet {
            self.layer.borderColor = borderColor.CGColor
        }
    }

    @IBInspectable var borderWidth : CGFloat = 0.0 {
        didSet {
            self.layer.borderWidth = borderWidth
        }
    }

    @IBInspectable var cornerRadius : CGFloat = 0.0 {
        didSet {
            self.layer.cornerRadius = cornerRadius
        }
    }
}

Ich UIViewhabe einem View Controller im Storyboard ein hinzugefügt und seine Unterklasse auf gesetzt CustomView.

Geben Sie hier die Bildbeschreibung ein

Dies fügt die Zeile "Designables" hinzu. Es bleibt bei "Aktualisieren" hängen und der Tooltip sagt "Warten auf das Erstellen des Ziels". Es ändert sich nie von diesem Status.

Wenn ich zu den Attributprüfungen wechsle, kann ich folgende IBInspectableEigenschaften festlegen :

Geben Sie hier die Bildbeschreibung ein

Und einmal eingestellt, werden sie auch in den "Benutzerdefinierten Laufzeitattributen" angezeigt:

Geben Sie hier die Bildbeschreibung ein

Der Status "Designables" geht jedoch nie über "Aktualisieren" mit immer noch demselben Tooltip hinaus (ich habe mehrmals versucht, Cmd + B zu erstellen, es ändert sich nichts).

Außerdem IBInspectableerhalte ich beim Festlegen der Eigenschaften für jede eine Warnung:

IBDesignables - Benutzerdefiniertes Laufzeitattribut für den Schlüsselpfad "borderColor" in der Instanz von "UIView" wird ignoriert ... diese Klasse ist für den Schlüssel borderColor nicht mit der Schlüsselwertcodierung kompatibel.

Screenshot der generierten Warnungen:

Geben Sie hier die Bildbeschreibung ein


Ich bin mit den Schlüsselwert-Codierungs-kompatiblen Problemen vertraut und weiß im Allgemeinen, wie man sie löst ... aber ich verstehe nicht, wie man dieses Problem hier löst. Laut dem Identitätsinspektor der Ansicht ist die Ansicht eine "CustomView" (keine reguläre "UIView", die diese Eigenschaften nicht hat). Und wenn die Ansicht keine "benutzerdefinierte Ansicht" wäre, würden diese gestaltbaren Eigenschaften nicht im Attributinspektor angezeigt, oder? Wenn Interface Builder jedoch versucht, diese Attribute auf die Ansicht anzuwenden, wird wieder angenommen, dass die Klasse der Ansicht "UIView" ist und die Attribute nicht anwenden kann.

Irgendeine Hilfe? Bitte lassen Sie mich wissen, wenn ich einige wichtige Details ausgelassen habe, aber für das, was es wert ist, habe ich dieses Tutorial genau befolgt (außer ObjC vs Swift). Es ist auch erwähnenswert, dass ich dieses Tutorial genau auf einem anderen Computer befolgt habe und es wie ein Zauber funktioniert hat (ich wollte diesen Beitrag gestern Abend machen, aber der Computer, auf dem ich damals war, hatte dieses Problem nicht).


Basierend auf Kommentaren wurde vorgeschlagen, dass die .mDatei möglicherweise nicht enthalten ist und dies das Problem verursachen könnte. Ich dachte sicherlich, ich hätte mir alle Mühe gegeben, dass dieses Szenario der Fall wäre, aber ich habe es trotzdem überprüft.

Geben Sie hier die Bildbeschreibung ein

Als ich anfing, dies zu versuchen, hatte ich das Verständnis, dass die IB_DESIGNABLEKlassen Teil eines anderen UIKitRahmens sein mussten. Auf diesem ersten Screenshot können Sie sehen, dass ich ein "CustomViews" -Framework eingerichtet habe, das eine Klasse hat CustomView. Sie werden auch hier sehen, dass ich auch ein erstellt habe OtherView, das identisch mit ist CustomView, außer dass es nicht in einem separaten Framework ist. Das identische Problem besteht jedoch weiterhin im Storyboard zwischen beiden Klassen.

Hier haben wir einen Screenshot, der zeigt, dass er CustomView.mmit dem CustomViewsFramework erstellt werden soll:

Geben Sie hier die Bildbeschreibung ein

In der Zwischenzeit zeigt der folgende Screenshot verschiedene Dinge:

  • CustomViews.framework ist angemessen im Hauptprojekt enthalten.
  • OtherView.mist auch als Kompilierungsquelle enthalten. Selbst wenn etwas nicht stimmt CustomView, OtherViewsollte es funktionieren, es werden jedoch identische Fehler generiert.
  • Main.storyboardund LaunchScreen.xibwerden rot angezeigt. Ich habe keine Ahnung warum und habe nicht die geringste Ahnung, warum LaunchScreen.xibich sollte (ich habe diese Datei nicht berührt), obwohl ich sagen kann, dass ich nach dem Betrachten anderer Projekte Main.storyboardauch in Rot für diese Projekte angezeigt werde, und das bin ich nichts mit IB_DESIGNABLEoder IBInspectabledort zu tun .

Geben Sie hier die Bildbeschreibung ein


Ich habe es jetzt mehrmals versucht und wiederholt. Es funktioniert jedes Mal auf meinem Computer zu Hause - ich kann das in dieser Frage beschriebene Problem zu Hause nicht reproduzieren. Bei der Arbeit funktioniert es nie. Das in dieser Frage beschriebene Problem tritt jedes Mal auf.

Beide Computer sind Mac Minis, die dieses Jahr neu gekauft wurden (nicht die neuen Modelle, Modell Ende 2012). Auf beiden Computern wird OS X Yosemite 10.10 ausgeführt. Auf beiden Computern wird Xcode Version 6.1 ausgeführt. Zu Hause ist der Build (6A1052d). Heute Morgen kann ich bestätigen, dass auf beiden Computern identische Xcode-Builds ausgeführt werden.

Andere haben mir vorgeschlagen, dass es möglicherweise schlechtes RAM ist. Das scheint mir weit hergeholt. Ich habe das Projekt mehrmals neu gestartet und den Computer mehrmals neu gestartet. Mir scheint, wenn auf einem ungefähr 6 Monate alten Computer ein schlechter Arbeitsspeicher vorhanden wäre, würde ich andere Probleme sehen und dieses Problem wäre weniger konsistent. Dieses genaue Problem besteht jedoch weiterhin, obwohl das gesamte Projekt mehrmals von Grund auf neu gestartet und auf dem Computer vollständig neu gestartet wurde.


Wenn ich dieses Projekt kompiliere und ausführe, wird die benutzerdefinierte Ansicht mit den IBInspectableEigenschaften tatsächlich so angezeigt, wie ich es vom Storyboard erwartet habe. Ich stelle mir vor, dass dies auch ohne die Direktiven IB_DESIGNABLEund der Fall wäre IBInspectable, da diese als benutzerdefinierte Laufzeitattribute erstellt werden.

nhgrif
quelle
Nun, es war nur eine Idee. Ich habe CustomView.m vom Ziel entfernt und beim Ausführen der App ähnliche Warnungen erhalten.
Martin R
Das scheint ein echter Gremlin zu sein, wenn man den Vergleich mit einer scheinbar identischen Maschine betrachtet (die sich irgendwie unterscheidet). Haben Sie versucht, in Devforen zu posten? Es scheint, als ob Sie ohne zusätzliche Informationen blind fliegen, und Ihr Prozess scheint vernünftig und rational zu sein. Die "Build" -Warnung bedeutet möglicherweise nicht zu viel, da Xcode viele irreführende Fehlermeldungen enthält. Für Kicks haben Sie jedoch Editor -> "Ausgewählte Ansicht debuggen" ausprobiert, oder? (Funktioniert wahrscheinlich nicht, ist aber eine Überprüfung der Gesundheit wert). Wird in der (Protokollierungs-) Konsolen-App auch etwas angezeigt?
Chris Conover
Habe das gleiche Problem. Minen mit einer einzelnen xib-Datei, die eine IB_DESIGNABLE enthält. Wenn ich jedoch mein Setup überprüfe, ist die automatische Aktualisierung bereits aktiviert, und ich habe jetzt versucht, manuell zu aktualisieren, zuerst die abgeleiteten Daten zu löschen usw. Bisher hat nichts funktioniert. Das Seltsame ist, dass ich diese Steuerung gut funktionieren ließ, dann hörte sie auf. Und ich glaube nicht, dass ich dazwischen irgendeinen Code geändert habe. Verrückt.
Drekka
Zeigte Warnungen wie oben. Habe jetzt eine zweite Klasse mit dem Code erstellt, der vom ursprünglichen IB kopierbar ist. Diese Klasse funktioniert perfekt und wenn ich wieder zur ursprünglichen nicht arbeitenden Klasse gewechselt bin, funktioniert sie jetzt einwandfrei. Daraus bin ich zu dem Schluss gekommen, dass irgendwo ein Cache (nicht in abgeleiteten Daten) vorhanden ist, der erst gelöscht wird, wenn das ursprüngliche ib-Design gegen ein anderes ib-Design ausgetauscht wird. Das Wechseln zu einer UIView scheint diesen Cache nicht zu leeren. Nur ein weiteres ib designbar. Go figure :-)
drekka

Antworten:

75

Aufgrund des Vorschlags von chrisco, die ausgewählte Ansicht zu debuggen (was ich bereits getan hatte, aber erneut versuchte), bemerkte ich einige andere Optionen am unteren Rand des Editor-Menüs.

  • Ansichten automatisch aktualisieren
  • Alle Ansichten aktualisieren

Ich klickte auf "Alle Ansichten aktualisieren" und nachdem Xcode ein wenig nachgedacht hatte, zeigte das Storyboard plötzlich meine Ansicht wie erwartet an (wobei meine IBInspectableEigenschaften ordnungsgemäß angewendet wurden ).

Geben Sie hier die Bildbeschreibung ein

Ich habe dann den gesamten Prozess erneut durchlaufen, um zu bestätigen, dass dies die Lösung ist.

Ich habe eine neue Klasse erstellt ThirdView. Diese Klasse ist wieder identisch mit den anderen. Ich habe die Klasse meiner Ansicht geändert ThirdViewund diesmal etwas anderes bekommen:

Geben Sie hier die Bildbeschreibung ein

Klicken Sie auf "Anzeigen", um die Warnungen anzuzeigen:

Geben Sie hier die Bildbeschreibung ein

Diesmal eine neue:

Verwenden der Klasse UIView für Objekte mit benutzerdefinierter Klasse, da die Klasse ThirdView nicht vorhanden ist.

Dies ist nicht wirklich hilfreicher als das, was es bereits gab. Außerdem haben sich die anderen drei Warnungen jetzt seltsamerweise auf 6 verdoppelt.

Wenn ich im Dropdown-Menü des Editors erneut auf "Alle Ansichten aktualisieren" klicke, werden alle Fehler behoben und die Ansicht wird erneut ordnungsgemäß angezeigt.

Bis zu diesem Punkt war alles, was ich tat, etwas, mit dem ich zu Hause nie herumgespielt habe. Zu Hause hat es einfach funktioniert. Also habe ich "Ansichten automatisch aktualisieren" aktiviert und eine "Vierte Ansicht" zum Testen erstellt - wieder identisch mit den ersten drei.

Nachdem die Klasse der Ansicht in "FourthView" geändert wurde, sagte das Designables-Label für einen kurzen Moment "Aktualisieren" und schließlich "Aktualisieren":

Geben Sie hier die Bildbeschreibung ein

Also habe ich meinen Computer zu Hause überprüft. "Ansichten automatisch aktualisieren" ist auf dem Computer aktiviert, der immer funktioniert hat. Es wurde am Computer ausgeschaltet, der es nicht war. Ich kann mich nicht erinnern, diese Menüoption berührt zu haben. Ich kann Ihnen nicht einmal sicher sagen, ob es vor Xcode 6 existiert hat. Aber diese Option hat den Unterschied gemacht.


TL; DR, wenn Sie das gleiche Problem haben, das in der Frage beschrieben wurde, stellen Sie sicher, dass "Ansichten automatisch aktualisieren" aktiviert ist (oder manuell "Alle Ansichten aktualisieren", wenn Sie ein Update in IB benötigen):

Geben Sie hier die Bildbeschreibung ein

nhgrif
quelle
2
Ich habe tatsächlich nach Möglichkeiten gesucht, es auszuschalten, da es im Hintergrund gerendert wird, wodurch ältere MacBooks sehr langsam werden. Vielen Dank!
Departamento B
Dies kann vorübergehend behoben werden, aber lesen Sie die Antwort von @ Martin-Gilles Lavoie
Ashley Mills
22

Ich habe einige weitere Details, die dazu führen können, dass Ihre IBDesignable-Klassen nicht geladen werden.

Wählen Sie Ihr problematisches Storyboard / xib aus, in dem Ihre benutzerdefinierten Ansichten angezeigt werden sollen.

Wechseln Sie im Navigatorbereich zum Berichtsnavigator in Ihrem XCode-Arbeitsbereich / -Projekt.

Drücken Sie im Editor-Menü von XCode (wie von nhgrif erwähnt) die Option "Alle Ansichten aktualisieren". Dies wird dazu führen, dass IB eine Kompilierung für eine ganze Reihe von Dingen startet, die Sie sicher nicht erwarten würden.

Klicken Sie im Berichtsnavigator auf "Nach Gruppe", um Inhalte zu filtern und den Abschnitt "Interface Builder" anzuzeigen. Sie werden sehen, dass zum Laden des benutzerdefinierten IBDesignable Views-Frameworks VIELE Dinge kompiliert werden. Wenn jede dieser Ziele kompiliert dies nicht tun, wie (vielleicht veraltet) Einheit Testziele (auch wenn sie völlig unabhängig von dem Code ist , dass Lasten dieser Ansichten oder Storyboard), dann werden IB beim Laden der DLL fehlschlagen.

In meinem Fall hat IB versucht, 8 Ziele zu kompilieren, darunter 4, bei denen Unit-Tests durchgeführt wurden, die seit den letzten Änderungen an Refactoring, an denen wir gearbeitet haben, nicht aktualisiert wurden.

Die meisten Codeänderungen / -korrekturen, die ich vorgenommen habe, damit IB meine Zollansichten ordnungsgemäß laden und anzeigen kann, wenn sie nicht mit diesen Klassen zusammenhängen oder gar verknüpft sind, und das Storyboard während der Ausführung dieser Komponententests niemals geladen wird. IB war jedoch abhängig vom gesamten Arbeitsbereich, der kompiliert wurde, damit er funktioniert.

Martin-Gilles Lavoie
quelle
Hey, wie kann ich verhindern, dass IB versucht, Ansichten zu laden und anzuzeigen, die nicht mit diesen Klassen zusammenhängen oder verknüpft sind?
HannahCarney
Ich gehe davon aus, dass es mit Header-Abhängigkeiten zu tun hat. Wenn die gestaltbaren Klassen andere Klassen berühren, werden in dem Moment, in dem der Header angezeigt wird, die zugehörigen Implementierungen erstellt. Apple spielt mit dem Quellabhängigkeits-Diagrammcode in XC7GM, der in unserem Projekt völlig fehlschlägt, da XCode beim Erstellen des Diagramms abstürzt. Die folgenden 7.1betas zeigen das Problem nicht. Unser automatisiertes Build-System ist derzeit noch von 6.4 abhängig, daher haben wir nicht untersucht, wie dies unter XC6.4 weiter behoben werden kann. Wir springen direkt auf 7,1 GM.
Martin-Gilles Lavoie
Wenn Sie mehrere Ziele / Projekte haben, ist dies die absolut richtige Antwort und behebt das Problem wirklich - ALLE Ziele müssen sauber erstellt werden. Ich wusste nicht einmal, dass es im Berichtsnavigator einen Abschnitt "Interface Builder" gibt! Alle anderen Antworten, die ich gesehen habe, sind im Grunde genommen viele Handbewegungen, die das Problem möglicherweise vorübergehend beheben, aber dies ist die endgültige Lösung. Gut gemacht.
Ashley Mills
3
Daraus können wir schließen, dass das IB_DESIGNABLE-Attribut eine totale Scheiße und Zeitverschwendung ist. Vermeiden Sie es einfach.
m8labs
IB_DESIGNABLE hat nichts mit dem oben aufgeführten Problem und der oben aufgeführten Lösung zu tun. Es ist lediglich eine NO-OP-Flagge für IB, um brauchbare Dinge zu erkennen. Sie müssen nur ein sauberes Haus pflegen.
Martin-Gilles Lavoie
22

Nur ein kurzer Hinweis für alle anderen, die dieses Problem haben: Denken Sie daran, den Typ der Variablen anzugeben.

// Doesn't show up in IB
@IBInspectable var includeLeftSection = true

// Shows now that it knows the type
@IBInspectable var includeLeftSection : Bool = true
GoldenJoe
quelle
6

Ich hatte die gleiche Warnung Ignoring user defined runtime attribute for key path .., obwohl ich absolut sicher bin, dass ich mit meiner benutzerdefinierten IBDesignable-Ansichtsklasse nichts falsch gemacht habe.

In meinem Fall stellte sich heraus, dass es mit dem Xcode-Cache zu tun hatte.

rm -rf ~/Library/Developer/Xcode/DerivedData/*

Spülen DerivedDataund die Warnung ist weg.

Samwize
quelle
1
Verknüpfung in XCode, um das gleiche Ergebnis zu erzielen: ⌘⇧K
Mojo66
@ Mojo66 Ich glaube, Clean Build unterscheidet sich vom Löschen des DerivedData-Ordners. Natürlich ist ein sauberer Build manchmal gut genug , um bestimmte Xcode-Caching-Probleme zu lösen.
Samwize
@ Mojo66 du meintest wahrscheinlich ⌘⌥⇧K (cmd + alt + shift + K)
tzaloga
5

Falls jemand anderes auf den Fehler stößt, existiert die IB Designables-Klasse aus demselben Grund wie ich nicht. Die beste Antwort war nicht mein Problem ... aber hier ist ein leicht verwandtes Problem ...

Im Quellcode des Storyboards ist eine Eigenschaft namens customModule versteckt.

Zum Beispiel hatte ich eine Klasse namens ForwardArrow in einem separaten Framework, das ich versehentlich zu meinem Hauptziel hinzugefügt habe.

Das XML für einige Ansichten endete also als customClass = "ForwardArrow" customModule = "MainTargetNameWasHere"

Als ich sie vom Hauptziel im Build entfernte, aktualisierte das Storyboard MainTargetNameWasHere nicht auf CustomViews. Dies ist das Framework, in dem es sich befand, und gab an, dass keine Klasse einen Fehler gefunden hat.

Also TLDR; Stellen Sie sicher, dass das benutzerdefinierte XML-Attribut in Ihrem Storyboard auf den richtigen Wert festgelegt ist, wenn sich Ihr IBDesignable in einem anderen Framework befindet. Und wenn es überhaupt nicht da ist, füge es hinzu.

Beispiel aus meiner Quelle:

<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="MUG-jc-2Ml" customClass="ForwardArrow" customModule="CustomViews">
Dave Thomas
quelle
1
Heiliger Mist, das hat mich einen Tag lang verrückt gemacht. Was für ein böser kleiner Käfer.
GoldenJoe
5

Als Beispiel habe ich CheckboxButton über einen Pod verwendet und die Grafiken der Checkbox werden nie im Storyboard angezeigt, während ich die gleichen Probleme habe, die in der Frage hier beschrieben wurden:

Warnung: IB Designables: Verwenden der Klasse UIView für Objekte mit benutzerdefinierter Klasse, da die Klasse CheckboxButton nicht vorhanden ist

und

Warnung: IB Designables: Ignoriert das benutzerdefinierte Laufzeitattribut für den Schlüsselpfad "checkColor" auf der Instanz von "UIView". Treffen Sie eine Ausnahme, wenn Sie versuchen, ihren Wert festzulegen: [setValue: forUndefinedKey:]: Diese Klasse ist nicht codierungskompatibel für den Schlüssel checkColor.

Die Lösung meines Problems bestand darin, das Modul wie folgt mit dem Namen CheckboxButton zu versehen:

Hinweis: Sie sollten CheckboxButton durch den Namen des verwendeten Moduls ersetzen .

Sogar Cheng
quelle
4

Ich persönlich habe dieses Problem gelöst, indem ich mit der Schaltfläche "-" Inhalte aus meinem Identitätsinspektor gelöscht habe. Wenn Sie benutzerdefinierte Klassen entfernen, den Inhalt im IB ändern und dann eine neue benutzerdefinierte Klasse hinzufügen, werden die gestaltbaren Elemente im Identitätsinspektor nicht entfernt, und ich habe diesen Fehler erhalten. Einfach alles löschen und neu erstellen.Geben Sie hier die Bildbeschreibung ein

HannahCarney
quelle
Ich habe genau das getan, was du gesagt hast und es hat mein Problem gelöst. Alle vorherigen Lösungen, die hier vorgestellt wurden, haben es nicht geschafft. Vielen Dank. ; o)
XLE_22
@ XLE_22 Manchmal sind es die Antworten, die niemand betrachtet, die es lösen, oder? :)
HannahCarney
Ich hatte ein Problem, bei dem ich auf einigen meiner xibs eine IBInspectable-Eigenschaft umbenannt habe. Danach hatte ich eine Menge Warnungen, die mich darüber informierten, dass XCode die jetzt umbenannte Eigenschaft nicht finden konnte. Das Entfernen der Eigenschaft aus dem Identitätsinspektor hat mein Problem behoben.
WBuck
1

Ich weiß, dass dies beantwortet wird, aber hier ist noch eine Erfahrung.

Ich hatte einige Probleme, die nichts mit diesem Problem zu tun hatten, aber dabei habe ich @IBInspectable aus den Variablen in meiner Klasse entfernt und die Attribute aus dem Identitätsinspektor (alt-apple-3) gelöscht.

Nachdem ich das (Code-) Problem mit der Komponente behoben hatte, habe ich alles unzählige Male aktualisiert, aber immer noch keine Attribute im Identitätsinspektor.

Schließlich bemerkte ich, dass sie zurück waren, aber nur im Attributinspektor (alt-apple-4) . Sobald ich ihnen dort Werte hinzufügte, tauchten sie wieder im Identitätsinspektor auf

Gordon Dove
quelle
1

Die Antwort von Dave Thomas oben gab mir die (umgekehrte) Lösung, als dies nicht bei den anderen (Abgeleitete Daten, Editor> Aktualisieren) der Fall war, aber der Klarheit halber, falls die Leute nicht sicher sind, wo sie das XML bearbeiten sollen ... Sie tun es nicht. muss nicht!

  1. Wählen Sie in Ihrer Storyboard-Datei die problematische Ansicht aus
  2. Wählen Sie in der rechten Seitenleiste die Registerkarte Identitätsinspektor (3. Option von links).
  3. Sie haben Ihre benutzerdefinierte Klasse, die bereits festgelegt sein sollte, und die Module. Für mich war dies leer und ich bekam die gleichen Fehler wie OP. Ich habe das Moduleauf meinen Projektnamen und BAM gesetzt - es hat nach dem Wiederaufbau angefangen zu funktionieren!
whycodewhyyyy
quelle
0

Ich habe gerade den Wecker für dieses Problem durchgesehen. Ich habe alle hier und anderswo aufgeführten Dinge ohne Glück ausprobiert. Dies ist ein Storyboard, das für immer einwandfrei funktioniert hat und plötzlich nicht mehr mit dem Problem "Benutzerdefiniertes Laufzeitattribut ignorieren ..." funktioniert.

Aus welchem ​​Grund auch immer, durch Entfernen dieses Codes aus einem meiner IBDesignable wurde Folgendes behoben:

-(void)viewDidLoad {
    self.clipsToBounds = YES;
}

Wenn Sie dies entfernen, werden alle Warnungen auch in anderen IBDesignable-Objekten gelöscht. Ich habe keine Ahnung, warum dieser eine Schritt das Problem behoben hat, aber vielleicht hilft es auch jemand anderem.

IMFletcher
quelle
3
Sie vermissen Anruf zum Abendessen hier
RolandasR
0

Ich hatte das gleiche Problem und musste CornerRadius und BorderWidth in einen String ändern und dann in CGFloat umwandeln. Dies war die einzige Lösung für mich, um die Werte zu ändern und die Änderungen im Interface Builder anzuzeigen.

@IBInspectable var borderColor: UIColor? {
    didSet {
        layer.borderColor = borderColor!.CGColor
    }
}

@IBInspectable var borderWidth: String? {
    didSet {
        layer.borderWidth = CGFloat(Int(borderWidth!) ?? 0)
    }
}

@IBInspectable var cornerRadius: String? {
    didSet {
        layer.cornerRadius = CGFloat(Int(cornerRadius!) ?? 0)
        layer.masksToBounds = layer.cornerRadius > 0
    }
}
Chuy47
quelle
Ich denke, IBInspectable kann nur bestimmte Typen ausführen, also hätten Sie vielleicht Floatstattdessen verwenden CGFloatund das stattdessen
besetzen müssen