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

是否可以直接从界面构建器控制 UIView 边框 属性(颜色,厚度等…)或者我只能通过编程来做?

163025 次浏览

实际上你可以通过界面构建器来设置视图层的一些属性。我知道我可以通过xcode设置一个图层的borderWidth和cornerRadius。borderColor不能工作,可能是因为该层需要CGColor而不是UIColor。

您可能必须使用字符串而不是数字,但这是可行的!

layer.cornerRadius
layer.borderWidth
layer.borderColor
< p >更新: 层。masksToBounds = true

example

< p >更新: 为Keypath选择合适的Type:

enter image description here

虽然这可能会设置属性,但它实际上并不反映在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

Interface Builder

layer.borderUIColor

结果在运行时是明显的,而不是在Xcode中。

编辑:你还需要将layer.borderWidth设置为至少1,才能看到所选颜色的边界。

在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等)

enter image description here

这是它. .不需要在任何地方导入类别,只需在项目中添加类别的文件,并在故事板中查看这些属性。

与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,标签等在工具面板>属性检查器中可用:

Attributes Inspector

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

对于Swift 3和4,如果你愿意使用IBInspectables,则有:

@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和你休息的东西。

故事板并不适用于我所有的时间,即使在尝试了所有的 解< / p >

所以它总是完美的答案是使用代码,只是创建UIView的IBOutlet实例并添加属性

简单回答:

layer.cornerRadius = 10
layer.borderWidth = 1
layer.borderColor = UIColor.blue.cgColor

长话短说:

UIView/UIButton等的圆角

customUIView.layer.cornerRadius = 10

边界厚度

pcustomUIView.layer.borderWidth = 2

边框颜色

customUIView.layer.borderColor = UIColor.blue.cgColor