2014-11-29 22 views
5

Ho davvero bisogno di una mano qui. Ho creato una sottoclasse @IBDesignable di UILabel che funziona perfettamente con XCode Interface Builder. Tuttavia, anche impostando 'clipsToBounds' su false, Interface Builder continuerà a ritagliarlo mentre cambia le proprietà @IBInspectable.Interface Builder Clipping Designable Views

Se sto eseguendo l'app su simulatore o dispositivo, UILabel non è ritagliato e mi dà i risultati desiderati (pur continuando ad applicare i valori di Interface Builder).

prima del cambio (I subviews sono visibili) Before the change

dopo il cambiamento di Interface Builder (I subviews sono fuori di vista) After the change (builder)

dopo il cambiamento SIMULATORE (Le sottoview sono come previsto) After the change (simulator)

Qualsiasi aiuto sarebbe enormemente apprezzato. Il codice per la classe personalizzata è sotto.

@IBDesignable class UIFeaturedLabel: UILabel { 

@IBInspectable var borderWidth: Float = 4 
@IBInspectable var borderOffsetX: Float = 15 
@IBInspectable var borderOffsetY: Float = 5 
@IBInspectable var borderColor: UIColor = UIColor.whiteColor() 

private var headerView:UIView! 
private var footerView:UIView! 

override init() { 
    super.init() 
    createViews() 
} 

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

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

func createViews() { 
    clipsToBounds = false 
    layer.masksToBounds = false 

    headerView = UIView() 
    footerView = UIView() 

    headerView.backgroundColor = UIColor.whiteColor() 
    footerView.backgroundColor = UIColor.whiteColor() 

    addSubview(headerView) 
    addSubview(footerView) 
} 

override func layoutSubviews() { 
    super.layoutSubviews() 

    let left = CGFloat(-borderOffsetX) 
    let right = CGFloat(frame.width + CGFloat(borderOffsetX*2)) 
    let top = CGFloat(-borderOffsetY) 
    let bottom = CGFloat(frame.height - CGFloat(borderWidth/2)) + CGFloat(borderOffsetY) 

    headerView.frame = CGRectMake(left, top, right, CGFloat(borderWidth)) 
    footerView.frame = CGRectMake(left, bottom, right, CGFloat(borderWidth)) 
} 
} 
+0

Ho appena premuto anche questo, penso che sia un altro bug in Xcode. Questo esempio minimo http://stackoverflow.com/a/25475536/539149 non funziona in Interface Builder a partire da Xcode 7.2 (7C68). –

risposta

2

ancora in corso con XCode 7.3 iOS9.3, ma fissa in XCode versione 8.0 beta (8S128d).

Problemi correlati