/ / Dlaczego mam tę dodatkową przestrzeń podczas dodawania UIView.xib? - ios, swift, xib

Dlaczego mam tę dodatkową przestrzeń podczas dodawania UIView.xib? - ios, swift, xib

Dlaczego mam tę dodatkową przestrzeń podczas dodawaniaUIView.xib do UIView używanego jako kontener dla UIViewController. Używam Storyboard dla UIViewController, xcode 9.2,. Niebieski obszar to widok kontenera

Ekran

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]


}
}

Odpowiedzi:

2 dla odpowiedzi № 1

Odpowiedź na pytanie „co to jest” brzmi: jest to odległość między containerView i szczyt jego superview.

Pomyśl o tym. Masz tę linię:

calendarView = ClassName(frame: containerView.frame)

Ale następna linia będzie:

containerView.addSubview(calendarView)

Ale nie można ustawić ramki widoku pod względem jego podglądu rama. Są w dwóch różnych przestrzeniach współrzędnych! Rezultat jest taki, że calendarView jest przesunięty w swoim superwizji dokładnie tak, jak containerView jest przesunięty w obrębie jego superview. Często wynik byłby nawet gorszy.

Masz na myśli miedza.

calendarView = ClassName(frame: containerView.bounds)
containerView.addSubview(calendarView)

Teraz calendarView dokładnie wypełni containerView.

(Oczywiście nadal będziesz mieć problemy, ponieważ nie ustawiasz rzeczy za pomocą autolayout. Ale przynajmniej to da ci Inicjał stanowisko, którego oczekujesz).