我在检查器中看到我可以改变背景颜色,但是我想改变边框的颜色和粗细,可以吗?
当前回答
我想把这个添加到@marczking的答案(选项1)作为评论,但我在StackOverflow上的低级状态阻止了这一点。
我把@marczking对Objective c的回答做了一个移植,非常有魅力,谢谢@marczking!
UIView+Border.h:
#import <UIKit/UIKit.h>
IB_DESIGNABLE
@interface UIView (Border)
-(void)setBorderColor:(UIColor *)color;
-(void)setBorderWidth:(CGFloat)width;
-(void)setCornerRadius:(CGFloat)radius;
@end
UIView+Border.m:
#import "UIView+Border.h"
@implementation UIView (Border)
// Note: cannot use synthesize in a Category
-(void)setBorderColor:(UIColor *)color
{
self.layer.borderColor = color.CGColor;
}
-(void)setBorderWidth:(CGFloat)width
{
self.layer.borderWidth = width;
}
-(void)setCornerRadius:(CGFloat)radius
{
self.layer.cornerRadius = radius;
self.layer.masksToBounds = radius > 0;
}
@end
其他回答
swift 4.2中项目的边框颜色:
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell_lastOrderId") as! Cell_lastOrder
cell.layer.borderWidth = 1
cell.layer.borderColor = UIColor.white.cgColor
cell.layer.cornerRadius = 10
Xcode 6更新
由于Xcode的最新版本有一个更好的解决方案:
使用@IBInspectable,你可以直接在属性检查器中设置属性。
这将为您设置用户定义的运行时属性:
有两种方法可以设置:
选项1(在Storyboard中进行实时更新)
创建MyCustomView。 这继承自UIView。 设置@IBDesignable(这使得视图更新实时) 用@IBInspectable设置你的运行时属性(边框等) 将您的视图类更改为MyCustomView 在属性面板中编辑,并在故事板中查看更改:)
`
@IBDesignable
class MyCustomView: UIView {
@IBInspectable var cornerRadius: CGFloat = 0 {
didSet {
layer.cornerRadius = cornerRadius
layer.masksToBounds = cornerRadius > 0
}
}
@IBInspectable var borderWidth: CGFloat = 0 {
didSet {
layer.borderWidth = borderWidth
}
}
@IBInspectable var borderColor: UIColor? {
didSet {
layer.borderColor = borderColor?.CGColor
}
}
}
* @IBDesignable仅在MyCustomView类开始时设置有效
选项2(从Swift 1.2开始就不工作了,见评论)
扩展你的UIView类:
extension UIView {
@IBInspectable var cornerRadius: CGFloat = 0 {
didSet {
layer.cornerRadius = cornerRadius
layer.masksToBounds = cornerRadius > 0
}
}
@IBInspectable var borderWidth: CGFloat = 0 {
didSet {
layer.borderWidth = borderWidth
}
}
@IBInspectable var borderColor: UIColor? {
didSet {
layer.borderColor = borderColor?.CGColor
}
}
}
这样,您的默认视图总是在属性检查器中有那些额外的可编辑字段。另一个优点是您不必每次都将类更改为MycustomView。 然而,这样做的一个缺点是,你只能在运行应用程序时看到你的更改。
如果你不想编辑UIView的层,你总是可以将视图嵌入到另一个视图中。父视图将其背景颜色设置为边框颜色。它也会稍微大一点,这取决于你想要的边界有多宽。
当然,这只适用于你的视图不是透明的,你只想要一个单一的边界颜色。OP希望在视图本身的边界,但这可能是一个可行的替代方案。
如果你想在不同的边线上添加不同的边框,可能添加一个带有特定样式的子视图是一种容易想出的方法。
我不建议重写drawRect,因为这会导致性能下降。
相反,我将修改类的属性如下(在你的自定义uiview):
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
self.layer.borderWidth = 2.f;
self.layer.borderColor = [UIColor redColor].CGColor;
}
return self;
当采用上述方法时,我没有看到任何故障-不确定为什么放入initWithFrame会停止这些;-)
推荐文章
- 如何删除默认的导航栏空间在SwiftUI导航视图
- 如何在iOS中使用Swift编程segue
- Swift -整数转换为小时/分钟/秒
- Swift:声明一个空字典
- 为什么ARC仍然需要@autoreleasepool ?
- 在成功提交我的应用程序后,“太多符号文件”
- 首先添加一个UIView,甚至是导航栏
- 我如何改变UIButton标题颜色?
- 如何从UIImage (Cocoa Touch)或CGImage (Core Graphics)获取像素数据?
- 在Swift中如何调用GCD主线程上的参数方法?
- NSLayoutConstraints是可动画的吗?
- iOS -构建失败,CocoaPods无法找到头文件
- Xcode 4挂在“附加到(应用程序名称)”
- CFNetwork SSLHandshake iOS 9失败
- 请求失败:不可接受的内容类型:文本/html使用AFNetworking 2.0