mastodon-ios/Mastodon/Scene/Settings/Settings Overview/SettingsTableViewCell.swift

98 lines
3.7 KiB
Swift

// Copyright © 2023 Mastodon gGmbH. All rights reserved.
import UIKit
class SettingsTableViewCell: UITableViewCell {
static let reuseIdentifier = "SettingsTableViewCell"
let iconImageView: UIImageView
let iconImageBackgroundView: UIView
let titleLabel: UILabel
let secondaryLabel: UILabel
private let labelStackView: UIStackView
private let contentStackView: UIStackView
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
iconImageView = UIImageView()
iconImageView.translatesAutoresizingMaskIntoConstraints = false
iconImageBackgroundView = UIView()
iconImageBackgroundView.addSubview(iconImageView)
titleLabel = UILabel()
titleLabel.font = UIFontMetrics(forTextStyle: .body).scaledFont(for: .systemFont(ofSize: 17, weight: .regular))
secondaryLabel = UILabel()
secondaryLabel.font = UIFontMetrics(forTextStyle: .caption1).scaledFont(for: .systemFont(ofSize: 12, weight: .regular))
secondaryLabel.textColor = .secondaryLabel
labelStackView = UIStackView(arrangedSubviews: [titleLabel, secondaryLabel])
labelStackView.axis = .vertical
labelStackView.spacing = 2
labelStackView.alignment = .leading
contentStackView = UIStackView(arrangedSubviews: [iconImageBackgroundView, labelStackView])
contentStackView.translatesAutoresizingMaskIntoConstraints = false
contentStackView.axis = .horizontal
contentStackView.alignment = .center
contentStackView.spacing = 16
super.init(style: style, reuseIdentifier: reuseIdentifier)
contentView.addSubview(contentStackView)
setupConstraints()
}
required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") }
private func setupConstraints() {
let constraints = [
contentStackView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 8),
contentStackView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 16),
contentView.trailingAnchor.constraint(equalTo: contentStackView.trailingAnchor, constant: 8),
contentView.bottomAnchor.constraint(equalTo: contentStackView.bottomAnchor, constant: 8),
iconImageBackgroundView.heightAnchor.constraint(equalToConstant: 30),
iconImageBackgroundView.widthAnchor.constraint(equalTo: iconImageBackgroundView.heightAnchor),
iconImageView.centerYAnchor.constraint(equalTo: iconImageBackgroundView.centerYAnchor),
iconImageView.centerXAnchor.constraint(equalTo: iconImageBackgroundView.centerXAnchor),
iconImageView.widthAnchor.constraint(equalToConstant: 20),
labelStackView.topAnchor.constraint(greaterThanOrEqualTo: contentView.topAnchor, constant: 12),
contentView.bottomAnchor.constraint(greaterThanOrEqualTo: labelStackView.bottomAnchor, constant: 12),
]
NSLayoutConstraint.activate(constraints)
}
func update(with entry: SettingsEntry) {
titleLabel.textColor = entry.textColor
titleLabel.text = entry.title
if let secondaryTitle = entry.secondaryTitle {
secondaryLabel.isHidden = false
secondaryLabel.text = secondaryTitle
} else {
secondaryLabel.isHidden = true
}
if let icon = entry.icon {
iconImageView.image = icon
iconImageView.tintColor = .white
iconImageBackgroundView.isHidden = false
} else {
iconImageBackgroundView.isHidden = true
}
iconImageBackgroundView.layer.cornerRadius = 5
iconImageBackgroundView.backgroundColor = entry.iconBackgroundColor
accessoryType = entry.accessoryType
}
}