mat*_*ani 180 border interface-builder uiview ios
是否可以直接从界面构建器控制UIView边框属性(颜色,厚度等),或者我只能以编程方式进行操作?
Ric*_*man 385
实际上,您可以通过界面构建器设置视图图层的某些属性.我知道我可以通过xcode设置图层的borderWidth和cornerRadius.borderColor不起作用,可能是因为该图层需要CGColor而不是UIColor.
您可能必须使用字符串而不是数字,但它可以工作!
layer.cornerRadius
layer.borderWidth
layer.borderColor
Run Code Online (Sandbox Code Playgroud)
更新:layer.masksToBounds = true
Pet*_*ese 179
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
layer.borderUIColor
Run Code Online (Sandbox Code Playgroud)
结果将在运行时显而易见,而不是在Xcode中.
编辑:您还需要设置layer.borderWidth
为至少1才能看到具有所选颜色的边框.
在Swift 2.0中:
extension CALayer {
var borderUIColor: UIColor {
set {
self.borderColor = newValue.CGColor
}
get {
return UIColor(CGColor: self.borderColor!)
}
}
}
Run Code Online (Sandbox Code Playgroud)
在Swift 3.0中:
extension CALayer {
var borderUIColor: UIColor {
set {
self.borderColor = newValue.cgColor
}
get {
return UIColor(cgColor: self.borderColor!)
}
}
}
Run Code Online (Sandbox Code Playgroud)
Axe*_*min 78
类似的回答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
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,这将在Interface Builder中为Utilities面板> Attributes Inspector中的每个按钮,imageView,标签等提供:
注意:边框仅在运行时出现.
iHu*_*ulk 56
您可以创建一个UIView类别,并将其添加到类别的.h文件中
@property (nonatomic) IBInspectable UIColor *borderColor;
@property (nonatomic) IBInspectable CGFloat borderWidth;
@property (nonatomic) IBInspectable CGFloat cornerRadius;
Run Code Online (Sandbox Code Playgroud)
现在将其添加到.m文件中
@dynamic borderColor,borderWidth,cornerRadius;
Run Code Online (Sandbox Code Playgroud)
这也是.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];
}
Run Code Online (Sandbox Code Playgroud)
现在,您将在故事板中看到所有UIView子类(UILabel,UITextField,UIImageView等)
多数民众赞成无需在任何地方导入类别,只需在项目中添加类别的文件,并在故事板中查看这些属性.
Ram*_*att 10
对于Swift 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
}
}
}
Run Code Online (Sandbox Code Playgroud)
虽然这可能会设置属性,但它实际上并没有反映在IB中.因此,如果您实际上是在IB中编写代码,那么您可以在源代码中执行此操作
归档时间: |
|
查看次数: |
143692 次 |
最近记录: |