为什么 UIButton Label 包含在 UITableView tableHeaderView 中时会忽略外观设置?

Why does UIButton Label ingnores appearance setting when contained in UITableView tableHeaderView?

我创建了一个简单的 UIViewController,其中包含一个 UITableView。添加包含 UIButtontableHeaderView 时,似乎无法使用外观设置更改按钮标签。 tableHeaderView 之外的其他按钮已正确更新。

此处直接放置在 ViewControllers 视图中的按钮已正确更新,而外观设置似乎不会影响 tableHeaderView 中的按钮。

class ListViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    @IBOutlet weak var tableHeaderView: UIView!
    @IBOutlet weak var tableView: UITableView!
    
    override func viewDidLoad() {
        UILabel.appearance(whenContainedInInstancesOf: [TestButton.self]).font = UIFont.systemFont(ofSize: 30)
        UILabel.appearance(whenContainedInInstancesOf: [TestButton.self]).textColor = .red
        
        super.viewDidLoad()
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
        tableView.tableHeaderView = tableHeaderView
    }
    
    ...
}

class TestButton: UIButton {}

项目中现在有其他外观设置可以解释这一点。将外观设置移动到其他地方,例如application:didFinishLaunchingWithOptions没有改变问题。

这是一个错误还是我遗漏了什么?

我不确定这是否是您要查找的内容。

  1. Select按钮样式默认,然后
  2. 应用您的主题或您想要更改的任何 属性。

还有一件事而不是使用

UILabel.appearance(whenContainedInInstancesOf: [TestButton.self]).font = UIFont.systemFont(ofSize: 30)

使用按钮更改属性。

TestButton.appearance().setTitleColor(.brown, for: .normal)

这可能不是一个合适的方法。

A UIButton 用它的 titleLabel 做各种事情 - 包括改变文本颜色。

尝试使用 UILabel.appearance(...) 不会 覆盖正常行为。

您可以通过 运行 您的代码按原样查看:

  • 请注意,视图的 TestButton 确实 获得外观
  • 旋转设备以便自动布局重新定位按钮
  • 容颜尽失

这与我们使用的原因相同:

button.setTitleColor(.red, for: .normal)

而不是:

button.titleLabel?.textColor = .red

您可能想在自定义 TestButton class 中配置这些属性。这是基础知识:

class TestButton: UIButton {
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        commonInit()
    }
    required init?(coder: NSCoder) {
        super.init(coder: coder)
        commonInit()
    }
    func commonInit() {
        setTitleColor(.red, for: .normal)
        setTitleColor(.lightGray, for: .highlighted)
        titleLabel?.font = UIFont.systemFont(ofSize: 30)
        backgroundColor = .systemBlue
        layer.cornerRadius = 6
    }
}