3

这是我的@IBInspectable:代码:

@IBDesignable
class PBOView: UIView {
    @IBInspectable var borderRightColor: UIColor? {
        didSet {
            let borderRightView = UIView(frame: CGRectMake(frame.size.width - 10, 0, 10, frame.size.height))
            borderRightView.backgroundColor = borderRightColor

            addSubview(borderRightView)
        }
    }
}

这是 Storyboard 中的结果:

UIView 的宽度是150 在此处输入图像描述

在 iPhone 模拟器中: UIView 的宽度是150,但应该是80因为它是 iPhone。这就是为什么在我的自定义视图中看不到矩形的原因 在此处输入图像描述

当我设置clearColor为视图的背景时,结果如下: 在此处输入图像描述

为什么该 UIView 的边界和框架宽度错误? 实际上它们是来自 Storyboard 的宽度,而不是运行时的真实宽度。

4

2 回答 2

0

我正在挖掘一些,但我还没有找到优雅的属性或方法来解决这个问题。到目前为止唯一的方法是:

@IBDesignable
class PBOView: UIView {

    var borderRightView: UIView?

    @IBInspectable var borderRightColor: UIColor? {
        didSet {
            addBorderRightView()
        }
    }

    func addBorderRightView() {

        borderRightView = UIView(frame: CGRectMake(frame.size.width - 10, 0, 10, frame.size.height))
        borderRightView!.backgroundColor = borderRightColor
        addSubview(borderRightView!)
    }

    override func layoutSubviews() {
        super.layoutSubviews()

        if let borderRightView = borderRightView {
            borderRightView.removeFromSuperview()
        }
        if let borderRightColor = borderRightColor {
            addBorderRightView()
        }
    }
}

只需layoutSubviews()用您自己的内容覆盖方法。由于layoutSubviews()几乎在任何地方都被调用,因此它可以正常工作。

结果是:

在此处输入图像描述

仍在寻找优雅的解决方案 - 为我做这件事的方法。

于 2015-05-04T15:02:42.207 回答
-1

试试这个:subView 的框架应该等于 placeHolder 的边界。IE

subView.frame = placeholder.bounds;
于 2015-06-01T17:18:09.213 回答