Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 是否可以从interface builder设置UIView边框属性?_Ios_Uiview_Interface Builder_Border - Fatal编程技术网

Ios 是否可以从interface builder设置UIView边框属性?

Ios 是否可以从interface builder设置UIView边框属性?,ios,uiview,interface-builder,border,Ios,Uiview,Interface Builder,Border,是否可以直接从interface builder控制UIView边框属性(颜色、厚度等),或者我只能通过编程方式进行控制?实际上,您可以通过interface builder设置视图图层的某些属性。我知道我可以通过xcode设置层的边界宽度和角半径。borderColor不起作用,可能是因为图层需要CGColor而不是UIColor 您可能必须使用字符串而不是数字,但它是有效的 layer.cornerRadius layer.borderWidth layer.borderColor 更新:

是否可以直接从interface builder控制UIView边框属性(颜色、厚度等),或者我只能通过编程方式进行控制?

实际上,您可以通过interface builder设置视图图层的某些属性。我知道我可以通过xcode设置层的边界宽度和角半径。borderColor不起作用,可能是因为图层需要CGColor而不是UIColor

您可能必须使用字符串而不是数字,但它是有效的

layer.cornerRadius
layer.borderWidth
layer.borderColor
更新: layer.masksToBounds=true

更新: 为密钥路径选择适当的类型:


虽然这可能会设置属性,但它实际上并不反映在IB中。因此,如果您实际上是在IB中编写代码,那么您最好在源代码中这样做,Rich86Man的回答是正确的,但您可以使用类别来代理属性,例如layer.borderColor。(来自CocoaPod)

CALayer+xib配置。h:

#import <QuartzCore/QuartzCore.h>
#import <UIKit/UIKit.h>

@interface CALayer(XibConfiguration)

// This assigns a CGColor to borderColor.
@property(nonatomic, assign) UIColor* borderUIColor;

@end
#import "CALayer+XibConfiguration.h"

@implementation CALayer(XibConfiguration)

-(void)setBorderUIColor:(UIColor*)color
{
    self.borderColor = color.CGColor;
}

-(UIColor*)borderUIColor
{
    return [UIColor colorWithCGColor:self.borderColor];
}

@end

结果将在运行时显示,而不是在Xcode中

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

在Swift 2.0中:

#import <QuartzCore/QuartzCore.h>
#import <UIKit/UIKit.h>

@interface CALayer(XibConfiguration)

// This assigns a CGColor to borderColor.
@property(nonatomic, assign) UIColor* borderUIColor;

@end
#import "CALayer+XibConfiguration.h"

@implementation CALayer(XibConfiguration)

-(void)setBorderUIColor:(UIColor*)color
{
    self.borderColor = color.CGColor;
}

-(UIColor*)borderUIColor
{
    return [UIColor colorWithCGColor:self.borderColor];
}

@end
在Swift 3.0中:

#import <QuartzCore/QuartzCore.h>
#import <UIKit/UIKit.h>

@interface CALayer(XibConfiguration)

// This assigns a CGColor to borderColor.
@property(nonatomic, assign) UIColor* borderUIColor;

@end
#import "CALayer+XibConfiguration.h"

@implementation CALayer(XibConfiguration)

-(void)setBorderUIColor:(UIColor*)color
{
    self.borderColor = color.CGColor;
}

-(UIColor*)borderUIColor
{
    return [UIColor colorWithCGColor:self.borderColor];
}

@end

如果您想节省时间,只需使用两个
ui视图
,一个在后面作为边框颜色,另一个在前面较小,以提供边框效果。我也不认为这是一个优雅的解决方案,但如果苹果更关心这一点,那么你就不必这么做。

你可以为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、UIExtField、UIImageView等)的故事板中看到这一点

就这样。。无需在任何地方导入类别,只需在项目中添加类别的文件,并在情节提要中查看这些属性。

与iHulk的答案类似,但使用Swift

在项目中添加名为UIView.swift的文件(或将其粘贴到任何文件中):

然后,在Interface Builder中,在“实用程序”面板>“属性检查器”中的每个按钮、图像视图、标签等都可以使用此选项:


注意:边框将仅在运行时显示。

对于Swift 3和4,如果您愿意使用
i可检测的
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
        }
    }
}

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

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

它会很好地工作。

只有当您设置layer.masksToBounds=true,并且执行rest操作时,它才是绝对可能的

故事板并不总是适合我,即使我尝试了所有的方法 这里的解决方案

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

简短答复:


长答覆:

UIView/UIButton等的圆角 边界厚度 边框颜色

我不能让它为我工作。.m文件抱怨borderColor必须是borderUIColor并修复它,这样做之后它仍然显示警告,并且运行时边框颜色不会呈现。我的不同之处在于我有@implementation NameOfFile,而不是@implementation CALayer(NameOfFile),我不理解CALayer部分,你能解释一下吗please@PeterDeWeese很好的回答!=)实际上,您可以将Number与borderWidth一起使用,并接受NSNumber。它工作得很好。在我看来,这绝对是解决边界颜色问题的最佳解决方案。奇妙的类别使用!在斯威夫特工作!对于你和Peter DeWeese:我使用Xcode 4.6.3,我可以将keypath类型设置为“Color”,而无需实现CALayer接口。borderColor不能以这种方式设置。这是一个CGColorRef,但是IB颜色值类型是一个UIColor。所以这就是用户定义的运行时属性所做的!哈哈,我从2011年就开始为iOS写文章了,但我从来都不知道这些字段是用来做什么的。谢谢你的回答。很好,但是你必须为每个属性设置正确的类型。e的类型。G“layer.cornerRadius”必须设置为“Number”而不是“String”!另外,别忘了勾选“剪辑到边界”复选框,让cornerRadius正常工作。勾选此复选框,以防有人像我一样来自谷歌。要查看IB中反映的这些更改,只需创建UIView的子类,并将其分配给IB中要操作的任何视图。解决方法现在可以节省时间,将来会浪费更多时间。使用IB_DESIGNABLE对其进行补充,使IB使用drawRect:方法重新绘制自定义视图,这很好,如果在接口行之前在.h文件中写入IB_DESIGNABLE,则不需要在中添加@dynamic line。m@user1618612这和分辨率无关,它只是设置普通图层属性。@Gaurav您看到了什么错误?您在使用哪个组件(UIButton、UILabel等)?如果没有更多详细信息,我将无法帮助您:(在我从扩展的开头删除了
@IBDesignable
之前,我一直在使用Interface Builder崩溃。这太神奇了……谢谢!我使用的是XCode 8.2.1,非常方便整洁!谢谢!欢迎使用MVC!您查看的属性不应该出现在代码中!^这不是MVC。考虑到95%的时间这段代码都是在控制器中,它也是MVC,当然,你应该适当地子类化或扩展你的视图,然后只是在编码上进行配置:-)这是meGreat解决方案的最佳解决方案,谢谢。这个问题非常具体,请从Interface Builder询问如何做。你的答案与此无关。
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