是否可以直接从界面构建器控制UIView边框属性(颜色,厚度等),或者我只能以编程方式进行控制?
答案 0 :(得分:374)
实际上,您可以通过界面构建器设置视图图层的某些属性。我知道我可以通过xcode设置图层的borderWidth和cornerRadius。 borderColor不起作用,可能是因为该图层需要CGColor而不是UIColor。
您可能必须使用字符串而不是数字,但它可以使用!
layer.cornerRadius
layer.borderWidth
layer.borderColor
更新: layer.masksToBounds = true
答案 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
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 :
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等)
多数民众赞成无需在任何地方导入类别,只需在项目中添加类别的文件,并在故事板中查看这些属性。
答案 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 ) );
长答案:
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
它会正常工作。