是否可以从界面构建器设置UIView边框属性?

时间:2012-09-06 13:31:05

标签: ios uiview interface-builder border

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

10 个答案:

答案 0 :(得分:374)

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

您可能必须使用字符串而不是数字,但它可以使用!

layer.cornerRadius
layer.borderWidth
layer.borderColor
  

更新:   layer.masksToBounds = true

example

  

更新:   为Keepath选择合适的类型:

enter image description here

答案 1 :(得分:178)

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 {
    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!)
        }
    }
}

答案 2 :(得分:76)

Similar answer to iHulk's one, but in Swift

Add a file named UIView.swift in your project (or just paste this in any file) :

var winston = require('winston');
require('winston-loggly');

 winston.add(winston.transports.Loggly, {
    token: "<snip>",
    subdomain: "<snip>",
    tags: ["tag", ip.address()],
    json:true
});

winston.log('info',"Server.js starting up");

Then this will be available in Interface Builder for every button, imageView, label, etc. in the Utilities Panel > Attributes Inspector :

Attributes Inspector

Note: the border will only appear at runtime.

答案 3 :(得分:57)

您可以创建一个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等)

enter image description here

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

答案 4 :(得分:8)

对于 Swift 3和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
        }
    }
}

答案 5 :(得分:7)

虽然这可能会设置属性,但它实际上并不反映在IB中。因此,如果您实际上是在IB中编写代码,那么您可以在源代码中执行此操作

答案 6 :(得分:4)

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

答案 7 :(得分:1)

  

即使尝试了所有内容,Storyboard也不总是对我有用   解决方案在这里

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

简短答案:

$fpx_msgToken = "01";
$fpx_msgType = "BE";
$fpx_sellerExId = "ABC000012345";
$fpx_version = "6.0";
/* Generating signing String */
$data = $fpx_msgToken."|".$fpx_msgType."|".$fpx_sellerExId."|".$fpx_version;
/* Reading key */
$priv_key = file_get_contents('C:\\pki-keys\\DevExchange\\EX00002220.key');
$pkeyid = openssl_get_privatekey($priv_key);
openssl_sign($data, $binary_signature, $pkeyid, OPENSSL_ALGO_SHA1);
$fpx_checkSum = strtoupper(bin2hex( $binary_signature ) );

长答案:

UIView / UIButton等的圆角

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

边界厚度

customUIView.layer.cornerRadius = 10

边框颜色

pcustomUIView.layer.borderWidth = 2

答案 8 :(得分:-1)

只有当您设置layer.masksToBounds = true并休息时,这绝对是可能的。

答案 9 :(得分:-4)

请添加以下两行简单的代码:

self.YourViewName.layer.cornerRadius = 15
self.YourViewName.layer.masksToBounds = true

它会正常工作。