Я хочу создать простое приложение Swift 3 iOS 10 с двумя разными макетами в соответствии с классами размера. Когда у моего viewController
есть traitCollection.verticalSizeClass
типа .regular
, я хочу, чтобы мой blueView
(подкласс UIView
) был tableView.tableHeaderView
с высотой 50
. Когда у моего viewController
есть traitCollection.verticalSizeClass
типа .compact
, я хочу, чтобы мой blueView
был слева (с ограничением ширины автоматического макета 240
), а мой tableView
- справа.Неверный кадр для просмотра в таблицеView.tableHeaderView после второго поворота
Это код моего UIViewController
например:
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
}
}
}
Следующий скриншот показывает раскадровки со сценами, установленными в портретном режиме:
Следующий скриншот показывает раскадровка со сценами, установленными в ландшафтном режиме:
Полный проект можно найти на этом Github repo.
Все отлично работает при запуске: blueView
устанавливается как tableView.tableHeaderView
и имеет правильную высоту 50
. Если я вращаю свое устройство, все по-прежнему работает нормально: blueView
и tableView
имеют правильные ограничения.
Однако, если я поворачиваю устройство во второй раз, blueView
исчезают из-под контроля, а tableView
отображает пустой tableHeaderView
. Что я могу сделать для решения этой проблемы?