2017-03-24 51 views
-2

我希望這個子視圖能夠延伸超過它的超視圖,但超視圖的邊框切入子視圖。有沒有辦法來防止這種情況?Superview邊框切入子視圖

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

相關問題