Style settings-cell (IOS-14)

This commit is contained in:
Nathan Mattes 2023-06-27 11:07:55 +02:00
parent 1461a2a082
commit 942527af7c
3 changed files with 94 additions and 18 deletions

View File

@ -158,6 +158,7 @@
D8F0372C29D232730027DE2E /* HashtagIntentHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8F0372B29D232730027DE2E /* HashtagIntentHandler.swift */; };
D8F8A03A29CA5C15000195DD /* HashtagWidgetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8F8A03929CA5C15000195DD /* HashtagWidgetView.swift */; };
D8F8A03C29CA5CB6000195DD /* HashtagWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8F8A03B29CA5CB6000195DD /* HashtagWidget.swift */; };
D8F917012A4AD8A5008A5370 /* SettingsTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8F917002A4AD8A4008A5370 /* SettingsTableViewCell.swift */; };
DB0009A626AEE5DC009B9D2D /* Intents.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = DB0009A926AEE5DC009B9D2D /* Intents.intentdefinition */; settings = {ATTRIBUTES = (codegen, ); }; };
DB0009A726AEE5DC009B9D2D /* Intents.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = DB0009A926AEE5DC009B9D2D /* Intents.intentdefinition */; };
DB023D26279FFB0A005AC798 /* ShareActivityProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB023D25279FFB0A005AC798 /* ShareActivityProvider.swift */; };
@ -809,6 +810,7 @@
D8F0372B29D232730027DE2E /* HashtagIntentHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HashtagIntentHandler.swift; sourceTree = "<group>"; };
D8F8A03929CA5C15000195DD /* HashtagWidgetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HashtagWidgetView.swift; sourceTree = "<group>"; };
D8F8A03B29CA5CB6000195DD /* HashtagWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HashtagWidget.swift; sourceTree = "<group>"; };
D8F917002A4AD8A4008A5370 /* SettingsTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsTableViewCell.swift; sourceTree = "<group>"; };
DB0009A826AEE5DC009B9D2D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.intentdefinition; name = Base; path = Base.lproj/Intents.intentdefinition; sourceTree = "<group>"; };
DB0009AD26AEE5E4009B9D2D /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Intents.strings; sourceTree = "<group>"; };
DB023D25279FFB0A005AC798 /* ShareActivityProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareActivityProvider.swift; sourceTree = "<group>"; };
@ -1732,6 +1734,7 @@
5B90C455262599800002E742 /* Settings */ = {
isa = PBXGroup;
children = (
D8F916FF2A4AD898008A5370 /* Settings Overview */,
D8318A7E2A4466C900C0FB73 /* Legacy */,
D8318A7F2A4466D300C0FB73 /* SettingsCoordinator.swift */,
D8318A832A4468A800C0FB73 /* GeneralSettingsViewController.swift */,
@ -1872,6 +1875,14 @@
path = Hashtag;
sourceTree = "<group>";
};
D8F916FF2A4AD898008A5370 /* Settings Overview */ = {
isa = PBXGroup;
children = (
D8F917002A4AD8A4008A5370 /* SettingsTableViewCell.swift */,
);
path = "Settings Overview";
sourceTree = "<group>";
};
DB01409B25C40BB600F9F3CF /* Onboarding */ = {
isa = PBXGroup;
children = (
@ -3755,6 +3766,7 @@
DB023D2827A0FABD005AC798 /* NotificationTableViewCellDelegate.swift in Sources */,
DB8AF55025C13703002E6C99 /* MainTabBarController.swift in Sources */,
DB023D2C27A10464005AC798 /* NotificationTimelineViewController+DataSourceProvider.swift in Sources */,
D8F917012A4AD8A5008A5370 /* SettingsTableViewCell.swift in Sources */,
DB9D6BE925E4F5340051B173 /* SearchViewController.swift in Sources */,
D8318A842A4468A800C0FB73 /* GeneralSettingsViewController.swift in Sources */,
DBF1D257269DBAC600C1C08A /* SearchDetailViewModel.swift in Sources */,

View File

@ -0,0 +1,80 @@
// 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
private let contentStackView: UIStackView
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
iconImageView = UIImageView()
iconImageView.translatesAutoresizingMaskIntoConstraints = false
iconImageBackgroundView = UIView()
iconImageBackgroundView.addSubview(iconImageView)
titleLabel = UILabel()
contentStackView = UIStackView(arrangedSubviews: [iconImageBackgroundView, titleLabel])
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.heightAnchor.constraint(equalToConstant: 22),
iconImageView.widthAnchor.constraint(equalToConstant: 20),
titleLabel.topAnchor.constraint(greaterThanOrEqualTo: contentView.topAnchor, constant: 12),
contentView.bottomAnchor.constraint(greaterThanOrEqualTo: titleLabel.bottomAnchor, constant: 12),
]
NSLayoutConstraint.activate(constraints)
}
func update(with entry: SettingsEntry) {
titleLabel.textColor = entry.textColor
titleLabel.text = entry.title
if let icon = entry.icon {
iconImageView.image = icon
iconImageBackgroundView.isHidden = false
} else {
iconImageBackgroundView.isHidden = true
}
iconImageBackgroundView.layer.cornerRadius = 5
iconImageBackgroundView.backgroundColor = entry.iconBackgroundColor
accessoryType = entry.accessoryType
}
}

View File

@ -23,7 +23,7 @@ enum SettingsEntry: Hashable {
case .aboutMastodon:
return "About Mastodon"
case .supportMastodon:
return "Suppoprt Mastodon"
return "Support Mastodon"
case .logout(let accountName):
return "Logout @\(accountName)"
}
@ -80,10 +80,6 @@ enum SettingsEntry: Hashable {
}
}
class SettingsTableViewCell: UITableViewCell {
static let reuseIdentifier = "SettingsTableViewCell"
}
protocol SettingsViewControllerDelegate: AnyObject {
func done(_ viewController: UIViewController)
func didSelect(_ viewController: UIViewController, entry: SettingsEntry)
@ -117,19 +113,7 @@ class SettingsViewController: UIViewController {
else { fatalError("Wrong cell WTF??") }
let entry = self.sections[indexPath.section].entries[indexPath.row]
var content = cell.defaultContentConfiguration()
content.attributedText = NSAttributedString(string: entry.title, attributes: [
.foregroundColor: entry.textColor
])
content.image = entry.icon
content.imageProperties.cornerRadius = 5
// content.imageProperties.back
// imageproperties
// content.ima
cell.contentConfiguration = content
cell.accessoryType = entry.accessoryType
cell.update(with: entry)
return cell
}