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)
        }
    }
}

ストーリーボードでの結果は次のとおりです。

UIView の幅は150 ここに画像の説明を入力

および iPhone シミュレーター: UIView の幅は ですが150、iPhone であるため、そうする必要があります80これが、カスタム ビュー内に長方形が表示されない理由です。 ここに画像の説明を入力

ビューの背景に設定clearColorすると、結果は次のようになります。 ここに画像の説明を入力

そのUIViewの境界とフレームの幅が間違っているのはなぜですか? 実際には、実行時の実際の幅ではなく、ストーリーボードからの幅です。

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 に答える