内部にxib
を持つカスタムビュー(UIButton
)があり、次のようにID IBDesignable
を作成しました。
serView.Swift
import UIKit
@IBDesignable
class UserView: UIView {
@IBOutlet var view: UIView!
@IBOutlet weak var userButton: UIButton!
override init(frame: CGRect) {
super.init(frame: frame)
load()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
load()
}
fileprivate func load() {
Bundle.main.loadNibNamed("UserView", owner: self, options: nil)
addSubview(view)
self.frame = bounds
}
}
serView.xib
UserView
UIViewをBar Button Item
に追加し、UserViewクラスを割り当てましたが、何もレンダリングされず、次のビルドエラーが発生しました。
エラー:IB Designables:FoodViewControllerの自動レイアウトステータスのレンダリングと更新に失敗しました(bR3-Kz-wX7):エージェントは例外をスローしました。
現在の環境:Xcode 9、Swift 4
このスクリプトをPodfile
の最後に追加し、pod install
を再度実行しました。だから私は自分のプロジェクトを普通にビルドできた。
post_install do |installer|
installer.pods_project.build_configurations.each do |config|
config.build_settings.delete('CODE_SIGNING_ALLOWED')
config.build_settings.delete('CODE_SIGNING_REQUIRED')
end
end
私はまったく同じ問題を抱えていましたが、私にとっては、メインのバンドルを使用する代わりに、必要なペン先のバンドルを取得する必要がありました。本質的に変化:
Bundle.main.loadNibNamed("UserView", owner: self, options: nil)
に:
let bundle = Bundle(for: UserView.self)
bundle.loadNibNamed("UserView", owner: self, options: nil)
私の場合のように、LLDBで実行時に2つのバンドルを比較すると、それらは同一でした(クラス名は異なりますが、残りのセットアップはOPと同一でした)
Xcode 9.3、CocoaPods 1.5.3CocoaPodsバージョンの最近の更新が原因である可能性があります。 issue here を参照してください。
ストーリーボード、Cocoapodsに関連するStripe SDKのクラスSTPPaymentCardTextFieldにこのエラーIB Designables: Failed to render and update auto layout status
がありました。
解決策は、CocoaPodsを1.4.0にダウングレードすることです。
Sudo gem list cocoapods
Sudo gem uninstall cocoapods
Sudo gem install cocoapods -v 1.4.0
pod update
この質問はこの回答に関連しています。両方を確認してください。
ClassNameのインスタンスのレンダリングに失敗しました:エージェントは、nibをバンドルにロードする例外をスローしました
Xibファイルに孤立したアウトレットがないことを確認してください。アウトレットのペン先の各ビュー/要素を確認し、削除して再度追加します。
私にとって、それらは孤立したコンセントでした。ペン先とIBは非常に細かく、デバッガは多くの詳細を提供していないようです...これが機能しない場合は、新しいnib/xibファイルから始めるかもしれません。
この問題の解決には数日かかりました。他の人の利益のために、私は冗長な答えを与え、すべての関連するコードと接続を示しています。
修正アクション(上記)を実装したコミットは次のとおりです。 https://github.com/jfosterdavis/ZMAppFoundation/commit/6855f0d5b9cd1bc320395e57e2b271653ef7acd1
Xcodeバージョン9.2
ファイル構造は次のとおりです(注:ZMAppFoundation
という名前のココアポッドでポッドを作成しています。また、ZMPieTimerView.Swift
はソリューションに関連していません。):
Main.storyboard
ファイルでニブを表示可能(IBDesignable)にしたいここにファイルの所有者とxibのカスタムクラス、ZMGauge.xib
:
これが私のZMXibViewクラスです。
// Adapted from https://medium.com/zenchef-tech-and-product/how-to-visualize-reusable-xibs-in-storyboards-using-ibdesignable-c0488c7f525d
import UIKit
@IBDesignable
open class ZMXibView: UIView {
var contentView:UIView?
@IBInspectable var nibName:String?
override open func awakeFromNib() {
super.awakeFromNib()
xibSetup()
}
func xibSetup() {
guard let view = loadViewFromNib() else { return }
view.frame = bounds
view.autoresizingMask =
[.flexibleWidth, .flexibleHeight]
addSubview(view)
contentView = view
}
func loadViewFromNib() -> UIView? {
guard let nibName = nibName else { return nil }
let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: nibName, bundle: bundle)
return nib.instantiate(
withOwner: self,
options: nil).first as? UIView
}
override open func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
xibSetup()
contentView?.prepareForInterfaceBuilder()
}
}
ストーリーボードでは、私のxibはカスタムクラスに指定されています。私はココアポッドを使用してポッドを開発しています。モジュールを明示的に選択しました。 (私のXibViewクラスでは、nibName
プロパティを定義する必要があることに注意してください。):
その後、クリーニング、Xcodeの終了、再構築、またはIBが再度レンダリングするまでしばらく待つ必要があります。 XcodeがIBDesignablesのレンダリングを試みることをいつ決定するかは、私にはまだ謎であり、強制する方法がわかりません。
私のコードと私が取ったアクションに基づいて、私のペン先はMain.storyboardでIBDesignableで表示可能になりました。
あなたがそれを見逃した場合に備えて、私のソリューションはこの投稿の一番上にあります。私は、いくつかの孤立したIBOutletsを削除することで、OPによって引用されたエラーをクリアしました。
(xCode 9.2、Swift 4)以下はあなたの正確な問題には役立たないかもしれませんが、非常に似た問題を持つ他の人には役立つかもしれません。これは私のエラーでした:
エラー:IB Designables:CustomExampleView(XXXXX)の自動レイアウトステータスのレンダリングと更新に失敗しました:エージェントがクラッシュしました
CustomExampleView.xibおよびCustomExampleView.Swiftを削除するときのエラーを削除できました。複製するために、ファイルを再作成し、.xibに移動して、トップレベルビューのカスタムクラスをCustomExampleViewに設定しました。
私のmistakeは、File's Ownerにカスタムクラスを設定する代わりに、.xibのトップレベルビューにカスタムクラスを設定していました。適切なカスタムクラスを設定した後、私の問題は解決しました。
私にとって、修正はInterface Builderにオブジェクトを再描画させることに帰着しました。これを2か所で行い、コードを変更せずに両方を修正しましたが、エージェントエラーの症状とストーリーボードの空白のビューは最終的に修正されました。
1つは、UIViewをビューの下の別の順序にドラッグして再構築することで修正されました。 TableViewを使用したTableViewの2番目のセルは、TableViewを選択し、Prototypeセルのカウントを2に変更し、1秒待ってから1に戻すことで修正されました。白い空白だったTableViewは、すべての要素を正しく描画し、エージェントエラーはなくなりました。
IBのバグのように感じます。他の検索からも、同様のエラーに対する多くの解決策が存在します。これが誰かを助けることを願っています。
私があなたに伝えようとしていることをすることが違いを生むことはどれほど愚かだと思いますが、破壊的なコードを削除してみることができます
override func prepareForInterfaceBuilder() {
でのみ使用する
override func awakeFromNib() {
。これを行うと、変更がストーリーボードに希望どおりに反映される可能性があることを報告すると、さらに多くなります。
すべての行をコメントアウトし、消去のプロセスを使用して中断行を識別することにより、中断コードを識別できます。
post_install do |installer|
installer.pods_project.build_configurations.each do |config|
config.build_settings.delete('CODE_SIGNING_ALLOWED')
config.build_settings.delete('CODE_SIGNING_REQUIRED')
end
end
Podfileに上記のコードを入力すると、問題が解決します。このコードは、Cocoapodsを介してインストールされたフレームワークのコード署名の要件を排除します。しかし、Xcode 10ベット4を使用しているため、これはIBDesignableのバグのようです。Xcode10に組み込まれた新しいビルドシステムのため、このバグは発生しません。
これは、1.5.0などの一部のココアポッドの問題です。これを使用している場合、レンダリングが現在のバージョンから他のバージョンに移動できず、ターミナルでこのコマンドを実行する
Sudo gem uninstall cocoapods
このように言及することにより、特定のバージョンをインストールできます
Sudo gem install cocoapods -v 1.4.0
それがあなたのために働くことを願っています。
私にとってこの問題は
ハハハ古いハック:)ありがとう!
私はこれの原因についてあまり知りませんが、これを数回見ましたが、Xcodeを再起動するだけで修正されます。それは誰もが始めるべき場所であり、それがうまくいかない場合は、他の提案された答えを試すことができると思います。
残念ながら、IBDesignable内でIBOutletsを使用することはできません。ここであなたのためのより良い答え:
IBInspectableプロパティを介したライブレンダリングIBOutlet接続サブビュー
おそらく、あなたはUserViewにUIViewではなくUIButtonを拡張させたいのでしょうか?