我想根據大小等級使用兩種不同的佈局構建一個簡單的Swift 3 iOS 10應用程序。當我的viewController
的類型爲.regular
時,我想讓我的blueView
(UIView
的一個子類)爲tableView.tableHeaderView
,高度爲50
。當我的viewController
的traitCollection.verticalSizeClass
類型爲.compact
時,我希望我的blueView
位於左側(自動佈局寬度限制爲240
),而我的tableView
位於右側。在第二次輪換後在tableView.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
。我能做些什麼來解決這個問題?