Ограничения, не соблюдаемые при загрузке из XIB


Итак, у меня есть следующий XIB

Введите описание изображения здесь

Этот XIB при загрузке в виде tableviewcell выглядит следующим образом

Введите описание изображения здесь

С тех пор я решил, что мне не понадобится TableView, поэтому я изменил свой класс XIB с UITableViewCell на UIView. В ViewController я добавил этот код в viewDidLoad ()

var nView = MyChartView.instanceFromNib() as! MyChartView
self.view.addSubview(nView)

И я получил это в результате

Введите описание изображения здесь

Как вы можете видеть, он игнорирует поля и продолжает правую сторону (игнорировать красный цвет, так как я использовал его, чтобы попытаться решить проблему. Отсутствие данных диаграммы также не является проблемой). Я распечатал ширину рамки xib и увидел, что она немного больше, чем размер экрана, но я не смог исправить это. Кто-нибудь может решить эту проблему?

2 2

2 ответа:

При программном добавлении подвида необходимо также добавить ограничения между подвидом и его супервизором

var nView = MyChartView.instanceFromNib() as! MyChartView
self.view.addSubview(nView)
nView.translatesAutoresizingMaskIntoConstraints = false
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[nView]|", options:  [], metrics: nil, views: ["nView": nView]))
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[nView]|", options: [], metrics: nil, views: ["nView": nView]))

Вы не ограничили ширину экземпляра MyChartView, либо указав точный размер при добавлении подвида, либо программно добавив ограничения между экземпляром MyChartView и его супервизором. Не делая ни того, ни другого из них, размеры вида будут соответствовать тому, что они есть в xib.