是否可以直接从界面构建器控制 UIView 边框 属性(颜色,厚度等…)或者我只能通过编程来做?
实际上你可以通过界面构建器来设置视图层的一些属性。我知道我可以通过xcode设置一个图层的borderWidth和cornerRadius。borderColor不能工作,可能是因为该层需要CGColor而不是UIColor。
您可能必须使用字符串而不是数字,但这是可行的!
layer.cornerRadius layer.borderWidth layer.borderColor
< p >更新: 层。masksToBounds = true
< p >更新: 为Keypath选择合适的Type:
虽然这可能会设置属性,但它实际上并不反映在IB中。所以如果你本质上是在IB中编写代码,那么你也可以在源代码中这样做
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设置为至少1,才能看到所选颜色的边界。
layer.borderWidth
在Swift 2.0中:
extension CALayer { @objc var borderUIColor: UIColor { set { self.borderColor = newValue.CGColor } get { return UIColor(CGColor: self.borderColor!) } } }
在Swift 3.0中:
extension CALayer { @objc var borderUIColor: UIColor { set { self.borderColor = newValue.cgColor } get { return UIColor(cgColor: self.borderColor!) } } }
你可以创建一个UIView的category并将它添加到category的。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的答案相似,但在Swift中
在你的项目中添加一个名为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 } } }
然后这将在界面构建器中为每个按钮,imageView,标签等在工具面板>属性检查器中可用:
注意:边框只会在运行时出现。
对于Swift 3和4,如果你愿意使用IBInspectables,则有:
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 } } }
请添加这两行简单的代码:
self.YourViewName.layer.cornerRadius = 15 self.YourViewName.layer.masksToBounds = true
它会工作得很好。
它绝对可能只有当你设置layer.masksToBounds = true和你休息的东西。
layer.masksToBounds = true
故事板并不适用于我所有的时间,即使在尝试了所有的 解< / p >
所以它总是完美的答案是使用代码,只是创建UIView的IBOutlet实例并添加属性
简单回答:
layer.cornerRadius = 10 layer.borderWidth = 1 layer.borderColor = UIColor.blue.cgColor
长话短说:
customUIView.layer.cornerRadius = 10
pcustomUIView.layer.borderWidth = 2
customUIView.layer.borderColor = UIColor.blue.cgColor