gpt4 book ai didi

ios - UITableViewHeaderFooterView 首次加载时不显示自定义

转载 作者:行者123 更新时间:2023-11-28 15:55:27 37 4
gpt4 key购买 nike

在 Swift 3 中,我使用 UITableViewHeaderFooterView 的子类(称为 HeaderView)作为 TableView 的标题部分。

HeaderView 出队后,我自定义了它(1) 设置 textLabel.textColor = UIColor.red,(2) 向其添加 subview 。

当应用程序首次加载时, TableView 会加载标题,但它们具有(我假设是)“默认” View (textLabel.textColor 为灰色,并且没有我添加的 subview ).当我开始滚动并开始使更多 HeaderView 出列时,HeaderView 开始正确显示,直到最终不再有“默认”格式的 HeaderView。

应用的后续加载不再显示“默认” View 。

考虑的备选方案

  • 我知道这可以通过使我的 HeaderView 成为UITableViewCell 并从 Storyboard 自定义它,但是似乎更多的是使用原型(prototype)单元的解决方法为 header 指定的 UITableViewHeaderFooterView
  • 同样可以使用 XIB 文件来完成,但即使在 Xcode 8 中创建 UITableViewHeaderFooterView 的子类它不允许你创建一个 XIB 文件(所以一定有一些原因..)

非常感谢任何解释为什么会发生这种情况以及如何解决它的评论/答案!

更新

根据要求,我在代码中添加了代码以展示我所做的工作——您可以使用下面的代码重现问题,并且通常在 Storyboard中设置 TableViewController(Swift 3、Xcode 8.2、在 iOS 10.2 上模拟)适用于 iPhone 7)

ListTableViewController.swift

import UIKit

class ListTableViewController: UITableViewController {

// List of titles for each header
var titles: [String] {
var titles = [String]()
for i in 1...100 {
titles.append("List \(i)")
}
return titles as [String]

}

// Register view for header in here
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(ListHeaderView.self, forHeaderFooterViewReuseIdentifier: "Header")
}

// Table view data source
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let dequeuedCell = tableView.dequeueReusableHeaderFooterView(withIdentifier: "Header")
if let cell = dequeuedCell as? ListHeaderView {
cell.title = titles[section]
}
return dequeuedCell
}

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 44
}

override func numberOfSections(in tableView: UITableView) -> Int {
return titles.count
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 0
}

}

ListHeaderView.swift

import UIKit

class ListHeaderView: UITableViewHeaderFooterView {

var title: String? {
didSet {
updateUI()
}
}

private func updateUI() {
textLabel?.textColor = UIColor.red
textLabel?.text = title!
let separatorFrame = CGRect(x: 0, y: frame.height-1, width: frame.width, height: 0.25)
let separator = UIView(frame: separatorFrame)
separator.backgroundColor = UIColor.red
contentView.addSubview(separator)
}

}

这是灰色标题(初始加载时屏幕上满是它们)和滚动时开始出现的自定义红色标题的屏幕截图。

Header Views not showing customisations at first

最佳答案

对于任何感兴趣的人来说,这似乎是一个错误,现阶段最好的解决方案是配置属性,例如 textColor在 tableView 委托(delegate)方法中的标题 View 上 willDisplayHeaderView .在 View 出现之前的“最后一分钟”这样做可以让您覆盖系统试图对字体等施加的任何配置。

在此找到答案的来源 Troubles with changing the font size in UITableViewHeaderFooterView

关于ios - UITableViewHeaderFooterView 首次加载时不显示自定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41819678/

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