【发布时间】:2020-11-06 04:46:02
【问题描述】:
我将视图控制器的视图设置为 UITableView 的标题。
var headerView = CommunityPostDetailTableHeaderViewController()
override func viewDidLoad() {
// other stuffs
headerView.view.frame = CGRect(x: 0, y: 0, width: self.tableView.frame.size.width, height: 100)
headerView.delegate = self
self.tableView.tableHeaderView = headerView.view
}
并使用这段代码根据视图的大小调整它的大小。
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
if let headerView = tableView.tableHeaderView {
let height = headerView.systemLayoutSizeFitting(CGSize(width: tableView.bounds.width, height: 0)).height
var headerFrame = headerView.frame
// Comparison necessary to avoid infinite loop
if height != headerFrame.size.height {
headerFrame.size.height = height
headerView.frame = headerFrame
tableView.tableHeaderView = headerView
}
}
}
我将这种技术用于我的两个表格视图。
- tableview 直接从视图控制器呈现,如下所示:
let playerController = VideoDetailController()
playerController.modalPresentationStyle = .fullScreen
playerController.video = video
self.present(playerController, animated: true, completion: nil)
在所有 iOS 设备上都能正常工作。
- 另一个是通过嵌入导航控制器来呈现的:
let communityPostDetailVC = CommunityPostDetailViewController()
communityPostDetailVC.delegate = self
if let indexpath = indexpath {
communityPostDetailVC.communityPost = datasource[indexpath.row]
communityPostDetailVC.indexpath = indexpath
}
let navigationController = UINavigationController(rootViewController: communityPostDetailVC)
navigationController.modalPresentationStyle = .fullScreen
self.present(navigationController, animated: true)
在 iPhone 5/5s/SE(1st gen)/6/6s/7/8/SE(2nd gen) 上无法正确调整大小。 我不明白为什么它不适用于较小的手机。您可以在下面的比较附件中看到空白。在较小的 SE 中,空间更大。
欢迎提出任何建议/想法。我现在一头雾水。
PS:我已经嵌套了视图控制器。 headerView 是一个视图控制器,它持有另一个视图控制器的视图。 FB 标志和下方的粉色标签是嵌套视图控制器的一部分。除此之外,其他一切都在 headerView 的视图控制器的视图中。
【问题讨论】:
标签: ios swift uitableview uinavigationcontroller