是否有可能从界面生成器设置的UIView边框属性?(Is it possible to set UI

2019-06-18 01:25发布

是否有可能控制直接从Interface Builder中的UIView边框属性(颜色,厚度等)或我只能做到这一点编程?

Answer 1:

其实你可以通过界面生成器设置视图的层的一些性质。 我知道,我可以通过Xcode中设置图层的边框宽度和cornerRadius。 BORDERCOLOR不起作用,可能是因为该层想要一个CGColor代替的UIColor。

您可能需要使用字符串而非数字,但它的工程!

layer.cornerRadius
layer.borderWidth
layer.borderColor

更新:layer.masksToBounds =真

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



Answer 2:

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见到的边界与所选择的颜色。

在雨燕2.0:

extension CALayer {
    var borderUIColor: UIColor {
        set {
            self.borderColor = newValue.CGColor
        }

        get {
            return UIColor(CGColor: self.borderColor!)
        }
    }
}

在雨燕3.0:

extension CALayer {
    var borderUIColor: UIColor {
        set {
            self.borderColor = newValue.cgColor
        }

        get {
            return UIColor(cgColor: self.borderColor!)
        }
    }
}


Answer 3:

类似的答案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
        }
    }
}

那么这将是可在Interface Builder中的每一个按钮,ImageView的,标签等实用工具面板>属性检查器:

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



Answer 4:

你可以做的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等)

那是它..没有需要的任何地方进口类别,只需在工程中添加类的文件,并看到在故事板这些属性。



Answer 5:

对于斯威夫特3和4,如果你愿意使用IBInspectable S,有这样的:

@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
        }
    }
}


Answer 6:

虽然这可能设置的属性,它并不真实地反映IB。 所以,如果你基本上在IB编写代码,你不妨再去做你的源代码



Answer 7:

如果你想节省时间,只使用两个UIViews在彼此的顶部,一个在后面是边框的颜色,和一个在前面小,给人带边效果。 我不认为这是一个优雅的解决办法,但如果苹果关心多一点,那么你不应该这样做。



Answer 8:

它绝对有可能的,只有当你设置layer.masksToBounds = true和你休息的东西。



Answer 9:

请添加这些代码2简单的线路:

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

它将很好地工作。



文章来源: Is it possible to set UIView border properties from interface builder?