Ich möchte eine einfache Swift 3 iOS 10 App mit zwei verschiedenen Layouts nach Größenklassen erstellen. Wenn meine viewController
eine traitCollection.verticalSizeClass
vom Typ .regular
hat, möchte ich meine blueView
(eine Unterklasse von UIView
) die tableView.tableHeaderView
mit einer Höhe von 50
sein. Wenn meine viewController
eine traitCollection.verticalSizeClass
des Typs .compact
hat, möchte ich meine blueView
auf der linken Seite sein (mit einer Auto-Layout-Breitenbeschränkung von 240
) und meine tableView
auf der rechten Seite sein.Falscher Frame für Ansicht in tableView.tableHeaderView nach einer zweiten Umdrehung
Dies ist der Code meiner UIViewController
Beispiel:
import UIKit
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView! {
didSet {
tableView.dataSource = self
tableView.delegate = self
}
}
@IBOutlet weak var blueView: UIView!
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
return tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
if self.traitCollection.verticalSizeClass == .regular {
blueView.bounds = CGRect(x: tableView.frame.origin.x, y: tableView.frame.origin.y, width: tableView.bounds.width, height: 50)
tableView.tableHeaderView = blueView
} else {
self.tableView.tableHeaderView = nil
}
}
}
Der folgende Screenshot zeigt das Storyboard mit Szenen im Portrait-Modus eingestellt:
Der folgende Screenshot der zeigt, Storyboard mit Szenen im Querformat:
Das komplette Projekt finden Sie unter Github repo.
Alles funktioniert beim Start gut: blueView
als tableView.tableHeaderView
gesetzt und hat die richtige Höhe von 50
. Wenn ich mein Gerät rotiere, funktioniert alles noch gut: blueView
und tableView
haben korrekte Einschränkungen.
Wenn ich jedoch das Gerät ein zweites Mal drehe, verschwindet blueView
aus der Sicht des Controllers und tableView
zeigt einen leeren tableHeaderView
an. Was kann ich tun, um dieses Problem zu lösen?