我有一个设置屏幕,我想在我的静态 UITableView
中添加一个包含应用程序版本号的页脚:
我已经阅读了很多关于SO的帖子,其中绝大多数似乎是Objective-C和/或使用UITableView
和其他人在动态内容的tableView(_:titleForHeaderInSection:)
中添加页脚。我找到了one question的答案,建议只使用UITableView.tableFooterView
属性,所以我也尝试了这个,但仍然没有得到任何结果,如上图所示。
这就是我所做的:
override func viewDidLoad() {
super.viewDidLoad()
setUpView()
}
func setUpView() {
self.navigationController?.navigationBar.topItem?.title = "Settings"
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(self.dismissSettings(_:)))
formulasTitle.textColor = UIColor.black
liftsTitle.textColor = UIColor.black
roundNumbersTitle.textColor = UIColor.black
sendFeedbackTitle.textColor = UIColor.black
unitsTitle.textColor = UIColor.black
pleaseRateTitle.textColor = UIColor.black
legalMumboJumboTitle.textColor = UIColor.black
currentFormulaSelection.detailTextLabel!.text = settingsViewModel.defaultFormulaName
currentLiftsSelection.detailTextLabel!.text = settingsViewModel.defaultLiftName
weightUnitControl.selectedSegmentIndex = settingsViewModel.weightUnitSelectedSegmentIndex
roundNumbersSwitch.isOn = settingsViewModel.roundNumbersSwitchOn
roundNumbersSwitch.addTarget(self, action: #selector(self.roundingOptionDidChange), for: .valueChanged)
weightUnitControl.addTarget(self, action: #selector(weightUnitDidChange), for: .valueChanged)
let versionLabel = UILabel()
versionLabel.text = getVersion()
let footer = UITableViewHeaderFooterView()
tableView.tableFooterView = footer
}
func getVersion() -> String {
let appVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "0"
let appBuild = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "0"
let versionLabelText: String
versionLabelText = "Version \(appVersion) (\(appBuild))"
return versionLabelText
}
正在使用tableView.tableFooterView
正确的解决方案而我只是错误地执行此操作,还是以其他方式添加页脚?
编辑#1
我已根据Taras的回答添加了这个,但仍然没有:
override func viewDidLoad() {
super.viewDidLoad()
let versionLabel = UILabel()
versionLabel.text = getVersion()
let footer = UITableViewHeaderFooterView(reuseIdentifier: "footer")
tableView.tableFooterView = footer
tableView.register(UITableViewHeaderFooterView.self, forHeaderFooterViewReuseIdentifier: "footer")
footer.frame = CGRect(x: 50, y: 10, width: 100, height: 100)
footer.contentView.addSubview(versionLabel)
footer.backgroundView?.backgroundColor = UIColor.green
footer.constrainToSuperView()
}
extension UIView {
func constrainToSuperView() {
guard let superview = superview else {
return
}
translatesAutoresizingMaskIntoConstraints = false
topAnchor.constraint(equalTo: superview.topAnchor).isActive = true
bottomAnchor.constraint(equalTo: superview.bottomAnchor).isActive = true
leadingAnchor.constraint(equalTo: superview.leadingAnchor).isActive = true
trailingAnchor.constraint(equalTo: superview.trailingAnchor).isActive = true
}
}
需要注意两件奇怪的事情:在运行时,footer
的框架为(50.0, 535.333333333333, 375.0, 100.0)
。另外,如果我这样做,我会看到带有版本号的标签,但它左对齐,我似乎无法居中:
footer.textLabel?.text = versionLabel.text
答案 0 :(得分:2)
let footer = UITableViewHeaderFooterView()
tableView.tableFooterView = footer
在这两行中你创建了零页框的空页脚。尝试使用下一个:
let footer = UIView(frame: CGRect(x:0, y:0, width: UIScreen.main.bound.width, height: 100))
footer.backgroundColor = UIColor.red
tableView.tableFooterView = footer
答案 1 :(得分:0)
@tarasChernyshenko的答案是正确的,但我认为您需要更具体的内容才能获得与您上传的图像相同的结果。
为此,您可以将带有零帧的UIView设置到tableView页脚,然后为视图设置适当的背景颜色。
类似这样的东西:
tableView.tableFooterView = UIView()
view.backgroundColor = .groupTableViewBackground
请注意,部分标题的颜色会与背景发生变化,这是正常现象,但是,如果要使用相同的颜色,则只需要为标题部分设置清晰的背景颜色。如果您没有为“标题”部分设置自定义视图,则只需覆盖此功能且重要,请设置为清除背景视图的背景色。
override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
if let view = view as? UITableViewHeaderFooterView {
view.backgroundView?.backgroundColor = .clear
}
}
按情节提要放置页脚视图,您需要在底部放置一个框架为零的视图,然后将其设置为可调整大小的蒙版,并在所有侧面进行调整。不管背景颜色如何,都不会显示。
作为数据,标头部分的背景颜色默认为UIExtendedSRGBColorSpace 0.920532 0.920532 0.926863 1
,但可以随型号或OS进行更改。