是否有可能从界面生成器设置UIView边框属性?

是否有可能直接从界面生成器控制UIView边框属性(颜色,厚度等),或者我只能以编程方式?

其实你可以通过界面构build​​器来设置视图层的一些属性。 我知道我可以通过xcode设置图层的borderWidth和cornerRadius。 borderColor不起作用,可能是因为图层想要一个CGColor而不是UIColor。

你可能不得不使用string而不是数字,但它的工作原理!

layer.cornerRadius layer.borderWidth layer.borderColor 

例

更新:select适当的Keypathtypes:

在这里输入图像描述

Rich86Man的答案是正确的,但你可以使用类别来代理属性,如layer.borderColor。 (来自ConventionalC CocoaPod)

CALayer的+ XibConfiguration.h:

 #import <QuartzCore/QuartzCore.h> #import <UIKit/UIKit.h> @interface CALayer(XibConfiguration) // This assigns a CGColor to borderColor. @property(nonatomic, assign) UIColor* borderUIColor; @end 

CALayer的+ XibConfiguration.m:

 #import "CALayer+XibConfiguration.h" @implementation CALayer(XibConfiguration) -(void)setBorderUIColor:(UIColor*)color { self.borderColor = color.CGColor; } -(UIColor*)borderUIColor { return [UIColor colorWithCGColor:self.borderColor]; } @end 

界面生成器

 layer.borderUIColor 

结果将在运行时显而易见,而不是在Xcode中。

编辑 :您还需要将layer.borderWidth设置为至less1以查看具有所选颜色的边框。

在Swift 2.0中:

 extension CALayer { var borderUIColor: UIColor { set { self.borderColor = newValue.CGColor } get { return UIColor(CGColor: self.borderColor!) } } } 

在Swift 3.0中:

 extension CALayer { var borderUIColor: UIColor { set { self.borderColor = newValue.cgColor } get { return UIColor(cgColor: self.borderColor!) } } } 

你可以做一个UIView的类别,并将其添加到类别的.h文件中

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

现在将其添加到.m文件中

 @dynamic borderColor,borderWidth,cornerRadius; 

这也在。 m文件

 -(void)setBorderColor:(UIColor *)borderColor{ [self.layer setBorderColor:borderColor.CGColor]; } -(void)setBorderWidth:(CGFloat)borderWidth{ [self.layer setBorderWidth:borderWidth]; } -(void)setCornerRadius:(CGFloat)cornerRadius{ [self.layer setCornerRadius:cornerRadius]; } 

现在你会看到在你的故事板中的所有UIView子类(UILabel,UITextField,UIImageView等)

在这里输入图像描述

多数民众赞成它..不需要任何地方导入类别,只需添加该类别的文件在项目中,并在故事板中看到这些属性。

类似的答案iHulk的一个,但在斯威夫特

在您的项目中添加一个名为UIView.swift的文件(或者将其粘贴到任何文件中):

 import UIKit @IBDesignable extension UIView { @IBInspectable var borderColor: UIColor? { set { layer.borderColor = newValue?.cgColor } get { guard let color = layer.borderColor else { return nil } return UIColor(cgColor: color) } } @IBInspectable var borderWidth: CGFloat { set { layer.borderWidth = newValue } get { return layer.borderWidth } } @IBInspectable var cornerRadius: CGFloat { set { layer.cornerRadius = newValue clipsToBounds = newValue > 0 } get { return layer.cornerRadius } } } 

然后,在“工具”面板>“属性检查器”中的每个button,图像视图,标签等界面生成器中,

属性检查器

注意:边框只会在运行时出现。

虽然这可能会设置属性,但它实际上并不反映在IB中。 所以,如果你基本上用IB编写代码,那么你可以在源代码中完成

如果你想节省时间,只需使用两个UIViews在彼此的顶部,一个在后面的是边界颜色,而在前面的一个较小,给出了边界的效果。 我不认为这是一个优雅的解决scheme,但如果苹果关心一点,那么你不应该这样做。

对于Swift 3和Swift 4来说 ,如果你愿意使用IBInspectable ,那就是:

 @IBDesignable extension UIView { @IBInspectable var borderColor:UIColor? { set { layer.borderColor = newValue!.cgColor } get { if let color = layer.borderColor { return UIColor(cgColor: color) } else { return nil } } } @IBInspectable var borderWidth:CGFloat { set { layer.borderWidth = newValue } get { return layer.borderWidth } } @IBInspectable var cornerRadius:CGFloat { set { layer.cornerRadius = newValue clipsToBounds = newValue > 0 } get { return layer.cornerRadius } } }