为什么 UIButton Label 包含在 UITableView tableHeaderView 中时会忽略外观设置?
Why does UIButton Label ingnores appearance setting when contained in UITableView tableHeaderView?
我创建了一个简单的 UIViewController
,其中包含一个 UITableView
。添加包含 UIButton
的 tableHeaderView
时,似乎无法使用外观设置更改按钮标签。 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
没有改变问题。
这是一个错误还是我遗漏了什么?
我不确定这是否是您要查找的内容。
- Select按钮样式默认,然后
- 应用您的主题或您想要更改的任何 属性。
还有一件事而不是使用
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
}
}
我创建了一个简单的 UIViewController
,其中包含一个 UITableView
。添加包含 UIButton
的 tableHeaderView
时,似乎无法使用外观设置更改按钮标签。 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
没有改变问题。
这是一个错误还是我遗漏了什么?
我不确定这是否是您要查找的内容。
- Select按钮样式默认,然后
- 应用您的主题或您想要更改的任何 属性。
还有一件事而不是使用
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
}
}