在swift 3中我可以做这样的事情让我的UIView转角:
import UIKit
@IBDesignable
class DesignableView: UIView {
}
extension UIView {
@IBInspectable
var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
}
}
}
Run Code Online (Sandbox Code Playgroud)
目前我正在设计一个"Build failed",但Idk为什么.我正在研究swift 4和Xcode 9.
为什么它不能在swift 4中运行?
我正在尝试实现一个简单的UIButton子类,它是IBDesignable.我希望能够从Interface Builder为控件的每个状态设置颜色.我知道这可以通过IBInspectable关键字实现.我在状态属性上使用KVO时遇到IB崩溃问题.IBDesignable调试器在deinit上崩溃.有谁知道我如何与KVO和IBDesignable一起工作?
@IBDesignable
class UIButtonActionButton: UIButton {
@IBInspectable var defaultColour: UIColor = UIColor.blueColor() {
didSet {
self.setNeedsDisplay()
}
}
@IBInspectable var selectedColour: UIColor = UIColor.blueColor()
@IBInspectable var disabledColour: UIColor = UIColor.grayColor()
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self._setup()
}
override init(frame: CGRect) {
super.init(frame: frame)
self._setup()
}
private func _setup(){
self.addObserver(self, forKeyPath: "state", options: NSKeyValueObservingOptions.New, context: nil)
self.layer.cornerRadius = 5.0
self.layer.masksToBounds = true
}
override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>) {
self.setNeedsDisplay() …Run Code Online (Sandbox Code Playgroud) 看起来像IBDesignable有多个目标和swift模块的一些问题.在我添加新目标(我的应用程序现在有2个目标,例如卖方和买方)后,我的StoryBoard开始停止构建警告:
Storyboard: warning: IB Designables: Using class UITextField for object with
custom class because the class _TtC15******Buyer11HCTextField does not exist
Run Code Online (Sandbox Code Playgroud)
我认为,designables编译器无法以某种方式找到正确的*swift**模块.
有任何建议如何解决这个问题?
图:
我正在使用Xcode 7.0.1和Swift2
在layoutSubviews我调用setImage()并传递它UIImage但它从未出现在Interface Builder中,但它总是出现在我运行程序时.
我正在尝试创建一个IBDesignable类,它在Interface Builder中呈现时可以具有透明背景.到目前为止,我已经有了不透明的黑色背景.我已经设置了一个简单的问题演示:
我在Interface Builder中放置了一个UIView.您无法看到它,因为它的背景很清晰.这应该是场景应该是什么样子.

这个屏幕截图的唯一区别是我将之前不可见视图的类设置为'DesignableView'.

以下是DesignableView类的完整实现:
#import <UIKit/UIKit.h>
IB_DESIGNABLE
@interface DesignableView : UIView
@end
@implementation DesignableView
- (void)drawRect:(CGRect)rect {
//rendering code goes here
}
@end
Run Code Online (Sandbox Code Playgroud)
有没有办法为IBDesignable视图提供正确,透明的背景?
我在这个网站上寻找一些解决方案,我发现这个答案并没有解决我的问题.
如何在Interface Builder中使用来自外部框架(扩展名为.framework的文件)的自定义UIView,而不使用CocoaPods,也不将此项目添加为项目的目标.
假设我有一个单独的项目:Cocoa Touch Framework项目模板,我想在我的其他项目中使用它.我将它添加到嵌入式二进制文件和链接框架和库中,我可以在Objective-C中使用它:
@import MyFramework;
Run Code Online (Sandbox Code Playgroud)
在斯威夫特:
import MyFramework
Run Code Online (Sandbox Code Playgroud)
但是从未知的原因,Interface Builder没有看到使用@IBDesignable的自定义视图有趣的想法是当我的项目运行时,外部框架的自定义视图正在显示.唯一的问题是在Interface Builder的设计过程中不显示任何内容.
我没有使用CocoaPods,我不想将我的框架项目作为Target嵌入,因为这是许多项目的通用框架.如何将此外部项目/框架附加到我的项目中,以便Interface Builder可以正常工作.当我使用Cocoa Touch Framework项目模板创建目标,以便此框架在我的项目"内部"时,Interface Builder在设计时和运行时期间按预期工作.
有什么方法可以将我的外部项目作为目标附加到其他项目?
我使用stroyboard从xib创建预览,但是我收到了以下错误:
file:///Users/miaios/Desktop/Demo/XibDemo/XibDemo/Base.lproj/Main.storyboard: error: IB Designables: Failed to update auto layout status: The agent raised a "NSInternalInconsistencyException" exception: Could not load NIB in bundle: 'NSBundle </Users/miaios/Library/Developer/Xcode/DerivedData/XibDemo-hkqfrktawlqpokczkfobsrmkfxqy/Build/Intermediates/IBDesignables/Products/Debug-iphonesimulator/XibDemo.app> (loaded)' with name 'HXXibView'
file:///Users/miaios/Desktop/Demo/XibDemo/XibDemo/Base.lproj/Main.storyboard: error: IB Designables: Failed to render instance of HXXibView: The agent threw an exception.
Run Code Online (Sandbox Code Playgroud)
码:
#import <UIKit/UIKit.h>
IB_DESIGNABLE
@interface HXXibView : UIView
@property (nonnull, nonatomic, strong) IBInspectable NSString *text;
@property (weak, nonatomic) IBOutlet UILabel *label;
@end
@implementation HXXibView
#pragma mark - Init Methods
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame]; …Run Code Online (Sandbox Code Playgroud) 我很好奇为什么不设置backgroundColor为红色?
@IBDesignable class CustomLabel: UIView {
let view = UIView()
func setup() {
backgroundColor = UIColor.red
view.backgroundColor = UIColor.green
view.frame = CGRect(x: 0, y: 0, width: 50, height: 50)
addSubview(view)
}
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
}
Run Code Online (Sandbox Code Playgroud)
这是结果.
这就是我期望的样子.
我创建了很多 IBInspectable。但是今天,我观察到 Xcode 有一些像这样的属性:
在链接中,我标记了矩形框。我想创建这样的自定义 IBInspectable。我不知道这可能还是不可能。
任何帮助,将不胜感激。
当引用使用UIColor(named:)Interface Builder创建的颜色时,由于颜色为 nil,它会崩溃。
最初我认为这是因为 IB 在错误的包中寻找颜色,但在指定要在 IB 中查找的包后仍然找不到颜色。
这在设备/模拟器上运行时运行良好。
extension UIColor {
// MARK: - Oranges
static let tangerine = UIColor(named: "Tangerine", in: Bundle(for: AppDelegate.self), compatibleWith: nil)!
.....
}
Run Code Online (Sandbox Code Playgroud)
再深入研究一下,IB 所查看的 Bundle 似乎包含对颜色和图像的引用,因此您希望它能够工作..?
po Bundle(for: AppDelegate.self)
NSBundle </Users/me/Library/Developer/Xcode/DerivedData/MyApp-ddspmruccrhrxhbawgwawhzkrrts/Build/Intermediates.noindex/IBDesignables/Products/Debug - DEV-iphonesimulator/MyApp.app> (loaded)`
Run Code Online (Sandbox Code Playgroud)
xcrun --sdk iphoneos assetutil --info pathToAsserts.car
{
"AssetType" : "Color",
"Color components" : [
1,
1,
1,
1
],
"Colorspace" : "srgb",
"Idiom" : "universal",
"Name" : "Marmalade",
"Scale" : 1
},
{
"AssetType" : "Image",
"BitsPerComponent" …Run Code Online (Sandbox Code Playgroud)