2017-03-24 12 views
-2

このサブビューはスーパービューを超えて拡張したいと思いますが、スーパービューの境界線はサブビューに分割されています。これを防ぐ方法はありますか?代わりに、ビューのレイヤーの境界線を使用してのスーパービューの境界線がサブビューに分割されています

Example

class TheView : UIView { 

    let theSubView = UIButton() 


    override init(frame: CGRect) { 
     super.init(frame: frame) 

     layer.borderColor = UIColor.gray.cgColor 
     layer.borderWidth = 1 
     clipsToBounds = false 

     addSubview(theSubView) 

     theSubView.backgroundColor = UIColor.green 
     theSubView.frame = CGRect(x: 0, y: -10, width: 50, height: 50) 
    } 
} 
+0

ああ、あなたは意味ですか? – Fogmeister

+0

ええ、そうです –

答えて

0

、国境を自分で描く:

class TheView : UIView { 

    let theSubView = UIButton() 

    override func draw(_ rect: CGRect) { 
     UIColor.gray.set() 
     UIBezierPath(rect: rect).stroke() 
    } 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
     clipsToBounds = false 
     isOpaque = false 

     addSubview(theSubView) 

     theSubView.backgroundColor = UIColor.green 
     theSubView.frame = CGRect(x: 0, y: -10, width: 50, height: 50) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
} 

enter image description here

+1

あなたは 'contentMode = .redraw'を設定することもできます。 –

0

を私はそれをするようにあなたの意見の構造を再設計する方が良いと思いますtheViewは、境界の外に何があるか心配する必要はありません。
たとえば、大小両方の矩形をサブビューとして持つことができます。次に、より小さなものを大きなものの上に置きます。次に、境界線をカバーすることができるはずです。

0

サブビューの内容の下にビューの独自の境界線を表示することはできません。これはCALayer borderWidth reference(例えば)に記載されています:

これは、受信機の内容とサブレイヤの上に合成された...それを修正する

一つの方法は、ちょうど境界線を描くために別々のサブビューを追加することで、境界線描画ビューをボタンの下に配置します。例:

@IBDesignable 
class TheView : UIView { 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
     commonInit() 
    } 

    private let borderView = UIView() 
    private let button = UIButton() 

    private func commonInit() { 
     borderView.layer.borderColor = UIColor.gray.cgColor 
     borderView.layer.borderWidth = 1 
     borderView.autoresizingMask = [.flexibleWidth, .flexibleHeight] 
     borderView.frame = bounds 
     addSubview(borderView) 

     button.backgroundColor = UIColor.green 
     button.frame = CGRect(x: 0, y: -10, width: 50, height: 50) 
     addSubview(button) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     commonInit() 
    } 

} 

結果:灰色の境界線は緑色の四角形で隠されるように

screen shot of result

関連する問題