2014-11-29 15 views
5

Naprawdę potrzebuję strony tutaj. Stworzyłem podklasę @IBDesignable UILabel, która działa poprawnie w XCode Interface Builder. Jednak nawet jeśli ustawię 'clipsToBounds' na false, Konstruktor interfejsów nadal będzie go przycinał podczas zmiany właściwości @IBInspectable.Konstruktor interfejsów Obcinanie obrazów Możliwe do wyświetlenia

Jeśli korzystam z aplikacji na symulatorze lub urządzeniu, UILabel nie jest przycinany i daje pożądane wyniki (przy jednoczesnym zachowaniu wartości, które ma Builder interfejsu).

przed zmianą (The subviews są widoczne) Before the change

po zmianie interfejs startowego (W subviews są poza zasięgiem) After the change (builder)

po zmianie w symulatorze (Subviews są zgodne z oczekiwaniami) After the change (simulator)

Każda pomoc zostanie ogromnie doceniona. Kod dla klasy niestandardowej znajduje się poniżej.

@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

Właśnie trafiłem to, myślę, że to jest kolejny błąd w Xcode. Ten minimalny przykład http://stackoverflow.com/a/25475536/539149 nie działa w Kreatorze interfejsów od Xcode 7.2 (7C68). –

Odpowiedz

2

Nadal występujące z XCode 7.3 iOS9.3, ale naprawione w wersji XCode 8.0 beta (8S128d).

Powiązane problemy