2016-11-06 5 views
0

Я погрузочные мой файл NIB на мой взгляд, с помощью:UIView от СИБА, не соответствующий родительских ограничений после добавления autolayout ограничений

override init(frame: CGRect) {   
    super.init(frame: frame) 
    Bundle.main.loadNibNamed("EventPopup", owner: self, options: nil) 
    //self.frame = self.view.bounds - DIDN'T WORK 
    //self.frame.size.width = 300 - DID'T WORK 
    self.addSubview(self.view); // adding the top level view to the view hierarchy 
} 

required init(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder)! 
    Bundle.main.loadNibNamed("EventPopup", owner: self, options: nil) 
    self.addSubview(self.view); // adding the top level view to the view hierarchy 
} 

Это работает и добавляет свой СИБ, но ширина UIView простирается за пределы родительского контейнер. Это происходит только после добавления автоопределения в uiview. Я проверил и начальный кадр размером 600x600.

Даже после попытки сброса размера NIB путем вызова layoutSubviews() и установки новых ограничений кадра в нем по-прежнему отказывается изменять размер. Например:

override func layoutSubviews() { 
    // self.frame.size.width = 300 
    //self.frame = CGRect(x: self.frame.origin.x, y: self.frame.origin.y, width: 200, height: self.frame.height) 
} 

ответ

2

Взгляните на это сообщение here. Посмотрите на 3-й совет, в котором показано, как создать представление, загружаемое с наконечника. Код Воспроизводится ниже (оговорке написано в Swift 2):

@IBDesignable 
class ProfileView: UIView { 
    @IBOutlet var imgView: UIImageView! 
    @IBOutlet var labelOne: UILabel! 
    @IBOutlet var labelTwo: UILabel! 
    override init(frame: CGRect) { 
     super.init(frame: frame) 
     setUp() 
    } 
    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     setUp() 
    } 
    func setUp() { 
     let bundle = NSBundle(forClass: self.dynamicType) 
     let nib = UINib(nibName: “Profile”, bundle: bundle) 
     let viewFromNib = nib.instantiateWithOwner(self, options: nil)[0] as! UIView 
     addSubview(viewFromNib) 
     viewFromNib.translatesAutoresizingMaskIntoConstraints = false 
     self.addConstraints(
     NSLayoutConstraint.constraintsWithVisualFormat(
      “H:|[v]|”, 
      options: NSLayoutFormatOptions(rawValue: 0), 
      metrics: nil, 
      views: [“v”:viewFromNib] 
     ) 
    ) 
     self.addConstraints(
     NSLayoutConstraint.constraintsWithVisualFormat(
      “V:|[v]|”, 
      options: NSLayoutFormatOptions(rawValue: 0), 
      metrics: nil, views: [“v”:viewFromNib] 
     ) 
    ) 
    } 
} 

После того, как вы его настроить должным образом в коде и бобах, вы должны быть в состоянии инициализировать его легко. Либо в строителе интерфейса или в коде:

// ViewController

override viewDidLoad() { 
    super.viewDidLoad() 
    self.addSubview(ProfileView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))) 
} 
+0

Почты где? – Allreadyhome

+0

Извините, я добавил ссылку. – DerrickHo328

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

  • Нет связанных вопросов^_^