Почему у меня есть это дополнительное пространство, когда я добавляю UIView.xib?
Почему у меня есть это дополнительное пространство, когда я добавляю UIView.xib в UIView, используемый в качестве контейнера для UIViewController. Я использую раскадровку для UIViewController, Xcode 9.2,. Синяя область - это контейнер.
class MyViewController: UIViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
//Same problem if I am calling this into a Button action
calendarView = ClassName(frame: containerView.frame)
containerView.addSubview(calendarView)
}
}
class ClassName: UIView{
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
private func commonInit(){
Bundle.main.loadNibNamed("NibName", owner: self, options: nil)
addSubview(contentView)
contentView.frame = bounds
contentView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
}
}
1 ответ
Ответ на вопрос "Что это такое" таков: это расстояние между containerView
и вершина его суперпредставления.
Думаю об этом. У вас есть эта строка:
calendarView = ClassName(frame: containerView.frame)
Но следующая строка будет:
containerView.addSubview(calendarView)
Но вы не можете установить фрейм представления с точки зрения фрейма его суперпредставления. Они находятся в двух разных координатных пространствах! Результатом здесь является то, что calendarView
смещен в пределах своего суперпредставления точно так же, как containerView
смещен в пределах своего суперпредставления. Зачастую результат будет намного хуже, чем это.
Вы имеете в виду границы.
calendarView = ClassName(frame: containerView.bounds)
containerView.addSubview(calendarView)
Теперь calendarView
точно заполнит containerView
,
(Конечно, у вас все еще будут проблемы позже, потому что вы не позиционируете вещи, используя автопоставку. Но по крайней мере это даст вам начальную позицию, которую вы ожидаете.)