我在检查器中看到我可以改变背景颜色,但是我想改变边框的颜色和粗细,可以吗?


当前回答

如果你不想编辑UIView的层,你总是可以将视图嵌入到另一个视图中。父视图将其背景颜色设置为边框颜色。它也会稍微大一点,这取决于你想要的边界有多宽。

当然,这只适用于你的视图不是透明的,你只想要一个单一的边界颜色。OP希望在视图本身的边界,但这可能是一个可行的替代方案。

其他回答

你也可以创建边界的颜色你的愿望..

view.layer.borderColor = [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1.0].CGColor;

*r,g,b是0到255之间的值。

你需要使用视图层来设置边界属性。例句:

#import <QuartzCore/QuartzCore.h>
...
view.layer.borderColor = [UIColor redColor].CGColor;
view.layer.borderWidth = 3.0f;

你还需要链接到QuartzCore.framework来访问这个功能。

我不建议重写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会停止这些;-)

如果你不想编辑UIView的层,你总是可以将视图嵌入到另一个视图中。父视图将其背景颜色设置为边框颜色。它也会稍微大一点,这取决于你想要的边界有多宽。

当然,这只适用于你的视图不是透明的,你只想要一个单一的边界颜色。OP希望在视图本身的边界,但这可能是一个可行的替代方案。

在UIView扩展中添加以下@IBInspectables

extension UIView {

  @IBInspectable var borderWidth: CGFloat {
    get {
      return layer.borderWidth
    }
    set(newValue) {
      layer.borderWidth = newValue
    }
  }

  @IBInspectable var borderColor: UIColor? {
    get {
      if let color = layer.borderColor {
        return UIColor(CGColor: color)
      }
      return nil
    }
    set(newValue) {
      layer.borderColor = newValue?.CGColor
    }
  }
}

然后你应该能够从属性检查器中直接设置borderColor和borderWidth属性。见附图

属性检查器