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
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 № 1Odpowiedź 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).