gpt4 book ai didi

UITableViewController 中的 iOS tableHeaderView 从未显示

转载 作者:行者123 更新时间:2023-11-28 07:27:05 24 4
gpt4 key购买 nike

我试图在 UITableViewController“TBVC1”中为我的 tableview 实现一个 tableViewHeader(而不是“viewForHeaderInSection”)。

我尝试了两种解决方案(当然行不通......):

1ST:在 Storyboard中的 UITableViewController 顶部添加了一个 UIView。如果我在此 UIView 中添加一个 UILabel(带有约束等),并尝试显示我的 View TBVC1...。我什么也没看到。完整 View 是空的。但是,如果我删除插入到标题 UIView 中的 UILabel,我可以看到我所有的单元格和 headerView 背景颜色...

你知道为什么我不能在这个 UIView 中放置任何 UI 组件吗?

2ND:如果我尝试像这样加载特定的 Nib UIView:

Bundle.main.loadNibNamed("Title", owner: nil, options: nil)!.first as! UIView
self.tableView.setTableHeaderView(headerView: customView)
self.tableView.updateHeaderViewFrame()



extension UITableView {

/// Set table header view & add Auto layout.
func setTableHeaderView(headerView: UIView) {
headerView.translatesAutoresizingMaskIntoConstraints = false

// Set first.
self.tableHeaderView = headerView

// Then setup AutoLayout.
headerView.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
headerView.widthAnchor.constraint(equalTo: self.widthAnchor).isActive = true
headerView.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
}

/// Update header view's frame.
func updateHeaderViewFrame() {
guard let headerView = self.tableHeaderView else { return }

// Update the size of the header based on its internal content.
headerView.layoutIfNeeded()

// ***Trigger table view to know that header should be updated.
let header = self.tableHeaderView
self.tableHeaderView = header
}
}

它也不起作用...我的全 View 是空的...

您是否知道为什么我没有在我的 UIView 中为 tableViewheader 成功显示一个简单的 UILabel

最佳答案

我不确定我的方法是否正确,但每次设置 tableHeaderView 时,我也手动设置了它的高度。

如果你想在你的 tableHeaderView 中使用自动布局,你可以在标题 View 上调用 systemLayoutSizeFitting(UIView.layoutFittingCompressedSize) 来获取计算的大小并分配headerView 的高度。

您可以在 Playground 中尝试这个简单的示例。

import UIKit
import PlaygroundSupport

class MyViewController: UITableViewController {
override func loadView() {
super.loadView()

let headerView = UIView()
headerView.backgroundColor = .red

let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.text = "Hello World!"
label.textAlignment = .center
label.textColor = .white

headerView.addSubview(label)

let attributes: [NSLayoutConstraint.Attribute] = [.leading, .top, .centerX, .centerY]
NSLayoutConstraint.activate(attributes.map {
NSLayoutConstraint(item: label, attribute: $0, relatedBy: .equal, toItem: headerView, attribute: $0, multiplier: 1, constant: 0)
})
// We have to set height manually, so use `systemLayoutSizeFitting` to get the layouted height
headerView.frame.size.height = headerView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height

tableView.tableHeaderView = headerView
}
}

PlaygroundPage.current.liveView = MyViewController()

关于UITableViewController 中的 iOS tableHeaderView 从未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56276076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com