Добавить вложенный просмотр в InterfaceBuilder

#ios #swift

#iOS #swift

Вопрос:

Я пытаюсь добавить метку в UIView, и я хотел бы просмотреть ее в InterfaceBuilder, однако, похоже, это не работает. я не только не вижу ярлык, но и не добавляю его для просмотра иерархии

 @IBDesignable
class UIFloatingLabelInput: UIView {

/*
// Only override draw() if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func draw(_ rect: CGRect) {
    // Drawing code
}
*/

let Label : UILabel?


func AddLabel(){
    Label?.text = "Hello World"
    Label?.center = CGPoint(x: self.center.x, y: self.center.y)
    self.addSubview(Label!)
    
}

override init(frame: CGRect){
    //Init vars
    Label = UILabel(frame: frame)
    //Call Initializer
    super.init(frame: frame)
    
    AddLabel()
}

required init?(coder: NSCoder){
    //Init vars
    Label = UILabel(coder: coder)
    //CallInitializer
    super.init(coder: coder)
    
    AddLabel()
}

override func prepareForInterfaceBuilder() {
    super.prepareForInterfaceBuilder()
    AddLabel()
}
  

}

но это не работает в IB, но отлично работает на устройстве.

Ответ №1:

Вам нужно указать свой фрейм метки, чтобы он работал в IB

 required init?(coder: NSCoder){
    //Init vars
    Label = UILabel(coder: coder)
    
    //CallInitializer
    super.init(coder: coder)
    

    //Give your label a frame
    Label.frame = bounds
    
    AddLabel()
}
  

Комментарии:

1. вы не можете использовать границы перед вызовом super.init, поскольку он не установлен. но я понимаю, что вы имеете в виду.