2014-11-29 4 views
5

Мне действительно нужна рука здесь. Я создал подкласс @IBDesignable UILabel, который отлично работает в XCode Interface Builder. Однако, даже если я установил 'clipsToBounds' в значение false, Interface Builder все равно будет зажимать его при изменении свойств @IBInspectable.Интерфейс Builder Clipping Designable Views

Если я запускаю приложение на тренажере или устройстве, UILabel не обрезается и дает мне желаемые результаты (в то же время применяя значения, которые имеет Interface Builder).

до изменения (The подвиды видны) Before the change

после изменения Interface Builder (The подвиды находятся вне поля зрения) After the change (builder)

после изменения SIMULATOR (Подразделения находятся в ожидании) After the change (simulator)

Любая помощь будет широко оценена. Код для пользовательского класса приведен ниже.

@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

Я просто ударил это также, я думаю, что это еще одна ошибка в Xcode. Этот минимальный пример http://stackoverflow.com/a/25475536/539149 не работает в Interface Builder с Xcode 7.2 (7C68). –

ответ

2

Все еще происходит с XCode 7.3 iOS9.3, но фиксировали в XCode версии 8.0 бета (8S128d).

Смежные вопросы