@IBDesignable 오류 : IB Designables : 자동 레이아웃 상태를 업데이트하지 못했습니다 : 인터페이스 빌더 Cocoa Touch Tool이 충돌했습니다
TextField 객체의 기본 위치 인 "자리 표시 자"기능을 추가하는 UITextView의 매우 간단한 하위 클래스가 있습니다. 서브 클래스에 대한 내 코드는 다음과 같습니다.
import UIKit
import Foundation
@IBDesignable class PlaceholderTextView: UITextView, UITextViewDelegate
{
@IBInspectable var placeholder: String = "" {
didSet {
setPlaceholderText()
}
}
private let placeholderColor: UIColor = UIColor.lightGrayColor()
private var textColorCache: UIColor!
override init(frame: CGRect) {
super.init(frame: frame)
self.delegate = self
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.delegate = self
}
func textViewDidBeginEditing(textView: UITextView) {
if textView.text == placeholder {
textView.text = ""
textView.textColor = textColorCache
}
}
func textViewDidEndEditing(textView: UITextView) {
if textView.text == "" && placeholder != "" {
setPlaceholderText()
}
}
func setPlaceholderText() {
if placeholder != "" {
if textColorCache == nil { textColorCache = self.textColor }
self.textColor = placeholderColor
self.text = placeholder
}
}
}
UITextView
Identity Inspector에서 객체 의 클래스를로 변경 한 후 Attribute Inspector에서 속성을 올바르게 PlaceholderTextView
설정할 수 있습니다 Placeholder
. 이 코드는 앱을 실행할 때 훌륭하게 작동하지만 인터페이스 작성기에는 자리 표시 자 텍스트를 표시하지 않습니다. 또한 다음과 같은 비 차단 오류가 발생합니다 (디자인 타임에 렌더링되지 않는 이유라고 가정).
오류 : IB 디자인 가능 : 자동 레이아웃 상태를 업데이트하지 못했습니다 : 인터페이스 빌더 Cocoa Touch Tool이 충돌했습니다
오류 : IB 디자인 가능 : PlaceholderTextView의 인스턴스를 렌더링하지 못했습니다.보기를 렌더링하는 데 200ms보다 오래 걸렸습니다. 도면 코드 성능이 저하 될 수 있습니다.
이 오류의 원인을 파악할 수 없습니다. 두 번째 오류는 drawRect ()를 재정의하지 않기 때문에 의미가 없습니다. 어떤 아이디어?
Interface Builder Cocoa Touch Tool이 충돌하면 생성 된 충돌 보고서가 있습니다. 이들은에 위치하고 ~/Library/Logs/DiagnosticReports
이름이 지정 IBDesignablesAgentCocoaTouch_*.crash
됩니다. 내 경우에는 내 코드에서 문제를 식별하는 유용한 스택 추적이 포함되었습니다.
I have had the same issue a couple of times. Both times it started when I was loading an IBDesignable nib onto the storyboard when the nib was not able to fit on the view (ie I had a button off of the UIView but still in the nib). Once I fixed that Xcode still gave me errors so I restarted Xcode until it randomly stopped giving me the error.
I hope this helps.
UPDATE: I just killed all processes named "Interface Builder Cocoa Touch Tool", restarted Xcode and the error went away. Don't know if this will always work or not.
In my case, I was doing the next in the initWithFrame/initWithCoder methods to create the view:
className = NSStringFromClass([self class]);
self.view = [[[NSBundle mainBundle] loadNibNamed:className owner:self options:nil] firstObject];
It looks like I was Not supposed to use the Main Bundle, but instead the bundle of the class. So I replaced that code for the following and it worked:
bundle = [NSBundle bundleForClass:[self class]];
className = NSStringFromClass([self class]);
self.view = [[bundle loadNibNamed:className owner:self options:nil] firstObject];
I thought maybe this might help somebody.
You could select your custom view in Interface Builder and then use Editor
, Debug Selected Views
. It will launch so-called IBDesignableAgentCocoaTouch
debug session when all breakpoints (including exception breakpoints) work and you could exactly identify the place your view crashes.
For Xcode 8 - Swift
Adding optional value as default value on @IBInspectable
causing issue for me.
This won't work:
@IBInspectable var repeatImage: UIImage = UIImage(named:"myImage")!{
didSet {
// configureView
}
}
This should work:
@IBInspectable var repeatImage: UIImage = RepeatImageView.getDefaultImage() {
didSet {
// configureView()
}
}
class func getDefaultImage() -> UIImage {
if let defaultImage = UIImage(named: "myImage") {
return defaultImage
} else {
return UIImage()
}
}
I was experiencing the similar Interface Builder issues rendering designables.
Using the technique suggested in this answer I was able to track down the issue to the use of image literals.
Rendering crash
self.backgroundImage.image = #imageLiteral(resourceName: "rectangleCenter")
No rendering crash
self.backgroundImage.image = UIImage(named: "rectangleCenter")
Actually if you have some old user defined attributes (which is not valid for current view) at any view in your storyboard, that may cause your agent to crash.
Besides, sometimes it happens just because of a nasty bug of Xcode. To check it out, when you're at storyboard uncheck Editor > Automatically Refresh Views, then move to another file, clean and restart your project. After you entered storyboard again, you can click Editor > Refresh Views and check automatic one again. That one also solved my problem once.
If both didn't work, then probably you have done something wrong about your IBDesignable view, so choose your crashed views in storyboard and debug by clicking Editor > Debug Views
This is not the case for this question, but maybe I will help someone else.
I had a similar problem when in my @IBDesignable class I did not implemented both:
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
// custom setup
}
override init(frame: CGRect) {
super.init(frame: frame)
// custom setup
}
I had the same issue and I solved it by adding the 'use_frameworks!' to my project's Podfile.
Hope it helps you.
In my case it was somehow related to a carthage framework that I was using. I had to add $(PROJECT_DIR)/Carthage/Build/iOS to the Runpath Search Paths build setting
In my case, it was a problem with OneSignal. Apparently, they have a bug within the version 2.2.0 and above. Switched to 2.1.6 and everything's great again!
Check out this.
When i debugged this i found out there are some classes which are modifying UI. Typically marquelabel which is a subclass of UILabel or any other class subclassing UIView and drawing ui at run time and colliding with Autolayout engine. Try giving fixed width or height for these custom views. If it doesn't solve your problem try Following solutions:-
Solution 1:- Uncomment #use_frameworks inside your pod file.
Solution 2:- Try deleting derived data. 1. Close Editor window of your Xcode and quit simulator -> 2. Go to Xcode Preferences -> Locations -> 3. Click small grey arrow showing derived data path -> 4. Select your project -> 5. Delete all the folders inside -> 6. Quit Xcode and reopen
Add it to the bottom of your Podfile and run pod install
# Workaround for Cocoapods issue #7606
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
Add this script at the end of my Podfile
and performed pod install
again.
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
A major issue is when you are creating @IBDesignable make sure the cocoapod file isn't included in the UITests or else it will cause this crash.
I find the reason is your xib is not the same size as the design in storyboard. Make sure the xib has the same height and width.
I was just missing this line of code platform :ios, '7.0'
and problem was solved. Just this line in your pod file and update your pod issue will be resolved.
For me it was a missing signing certificate, because I never ran the app, so Xcode did not yet create a certificate. Once I ran the app, the IBDesignable
rendering worked fine.
It's like if you got Code from other Developer and you get this error. Just run
pod install
This worked for me. Hope It helps.
Make sure that you are not directly initialising UIImage
or UIFont
using assets or fonts added in your project.
I always create a private func setUp()
in my @IBDesignable
custom UI
classes. which is called from init(frame: CGRect)
, init?(coder aDecoder: NSCoder)
. So I finally updated the setup()
as the following.
private func setUp() {
//... Doing initial configurations
// iconImageView.image = UIImage(named: "IconImageName")! // Causing the Crash, use if let OR guard let instead
if let icon = UIImage(named: "IconImageName") {
iconImageView.image = icon
iconImageView.frame.size = icon.size
}
// nameLabel.font = UIFont(name: "Calibri-Light", size: 15.0) // Causing the Crash, use if let OR guard let instead
if let font = UIFont(name: "Calibri-Light", size: size) {
nameLabel.font = font
} else {
nameLabel.font = UIFont.systemFont(ofSize: size)
}
// Doing other stuffs
}
Just let it to build and run on simulator if you have error in somewhere else in project just comment it out and run designable first to update designable and uncomment the other codes. It works for me.
'IT박스' 카테고리의 다른 글
2 열 div 레이아웃 : 너비가 고정 된 오른쪽 열, 왼쪽 유체 (0) | 2020.06.06 |
---|---|
동일한 테이블의 한 열에서 다른 열로 값 복사 (0) | 2020.06.06 |
안드로이드-View 안에 아이들을 넣습니까? (0) | 2020.06.05 |
TypeError : sequence item 0 : 예상되는 문자열, int found (0) | 2020.06.05 |
Boolean의 null 값은 언제 사용해야합니까? (0) | 2020.06.05 |