From 829c3f4cd232367525c43d2a5aa02f14f03475e5 Mon Sep 17 00:00:00 2001 From: CMK Date: Mon, 25 Oct 2021 17:24:44 +0800 Subject: [PATCH] fix: hashtag icon in search history record cell can not adaptive update appearance issue --- .../Section/Search/SearchHistorySection.swift | 18 +----- .../SearchResultTableViewCell.swift | 55 ++++++++++++++----- 2 files changed, 43 insertions(+), 30 deletions(-) diff --git a/Mastodon/Diffiable/Section/Search/SearchHistorySection.swift b/Mastodon/Diffiable/Section/Search/SearchHistorySection.swift index 8f39eb6bd..b5c5cd8cc 100644 --- a/Mastodon/Diffiable/Section/Search/SearchHistorySection.swift +++ b/Mastodon/Diffiable/Section/Search/SearchHistorySection.swift @@ -32,24 +32,8 @@ extension SearchHistorySection { } return cell case .status: + // Should not show status in the history list return UITableViewCell() -// let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: StatusTableViewCell.self), for: indexPath) as! StatusTableViewCell -// if let status = try? dependency.context.managedObjectContext.existingObject(with: statusObjectID) as? Status { -// let activeMastodonAuthenticationBox = dependency.context.authenticationService.activeMastodonAuthenticationBox.value -// let requestUserID = activeMastodonAuthenticationBox?.userID ?? "" -// StatusSection.configure( -// cell: cell, -// tableView: tableView, -// timelineContext: .search, -// dependency: dependency, -// readableLayoutFrame: tableView.readableContentGuide.layoutFrame, -// status: status, -// requestUserID: requestUserID, -// statusItemAttribute: attribute -// ) -// } -// cell.delegate = statusTableViewCellDelegate -// return cell } // end switch } // end UITableViewDiffableDataSource } // end func diff --git a/Mastodon/Scene/Search/SearchDetail/TableViewCell/SearchResultTableViewCell.swift b/Mastodon/Scene/Search/SearchDetail/TableViewCell/SearchResultTableViewCell.swift index a872fca43..0c919e7d5 100644 --- a/Mastodon/Scene/Search/SearchDetail/TableViewCell/SearchResultTableViewCell.swift +++ b/Mastodon/Scene/Search/SearchDetail/TableViewCell/SearchResultTableViewCell.swift @@ -16,7 +16,7 @@ import MastodonMeta final class SearchResultTableViewCell: UITableViewCell { - let _imageView: AvatarImageView = { + let avatarImageView: AvatarImageView = { let imageView = AvatarImageView() imageView.tintColor = Asset.Colors.Label.primary.color imageView.layer.cornerRadius = 4 @@ -24,6 +24,13 @@ final class SearchResultTableViewCell: UITableViewCell { return imageView }() + let hashtagImageView: UIImageView = { + let imageView = UIImageView() + imageView.image = UIImage(systemName: "number.circle.fill", withConfiguration: UIImage.SymbolConfiguration(pointSize: 34, weight: .regular))!.withRenderingMode(.alwaysTemplate) + imageView.tintColor = Asset.Colors.Label.primary.color + return imageView + }() + let _titleLabel = MetaLabel(style: .statusName) let _subTitleLabel: UILabel = { @@ -43,7 +50,8 @@ final class SearchResultTableViewCell: UITableViewCell { override func prepareForReuse() { super.prepareForReuse() - _imageView.af.cancelImageRequest() + avatarImageView.af.cancelImageRequest() + setDisplayAvatarImage() } override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { @@ -74,11 +82,20 @@ extension SearchResultTableViewCell { containerStackView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor) ]) - _imageView.translatesAutoresizingMaskIntoConstraints = false - containerStackView.addArrangedSubview(_imageView) + avatarImageView.translatesAutoresizingMaskIntoConstraints = false + containerStackView.addArrangedSubview(avatarImageView) NSLayoutConstraint.activate([ - _imageView.widthAnchor.constraint(equalToConstant: 42).priority(.required - 1), - _imageView.heightAnchor.constraint(equalToConstant: 42).priority(.required - 1), + avatarImageView.widthAnchor.constraint(equalToConstant: 42).priority(.required - 1), + avatarImageView.heightAnchor.constraint(equalToConstant: 42).priority(.required - 1), + ]) + + hashtagImageView.translatesAutoresizingMaskIntoConstraints = false + containerStackView.addSubview(hashtagImageView) + NSLayoutConstraint.activate([ + hashtagImageView.centerXAnchor.constraint(equalTo: avatarImageView.centerXAnchor), + hashtagImageView.centerYAnchor.constraint(equalTo: avatarImageView.centerYAnchor), + hashtagImageView.widthAnchor.constraint(equalToConstant: 42).priority(.required - 1), + hashtagImageView.heightAnchor.constraint(equalToConstant: 42).priority(.required - 1), ]) let textStackView = UIStackView() @@ -107,7 +124,9 @@ extension SearchResultTableViewCell { _titleLabel.isUserInteractionEnabled = false _subTitleLabel.isUserInteractionEnabled = false - _imageView.isUserInteractionEnabled = false + avatarImageView.isUserInteractionEnabled = false + + setDisplayAvatarImage() } override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { @@ -182,8 +201,7 @@ extension SearchResultTableViewCell { func config(with tag: Mastodon.Entity.Tag) { configure(with: AvatarConfigurableViewConfiguration(avatarImageURL: nil)) - let image = UIImage(systemName: "number.circle.fill", withConfiguration: UIImage.SymbolConfiguration(pointSize: 34, weight: .regular))!.withRenderingMode(.alwaysTemplate) - _imageView.image = image + setDisplayHashtagImage() let metaContent = PlaintextMetaContent(string: "#" + tag.name) _titleLabel.configure(content: metaContent) guard let histories = tag.history else { @@ -198,8 +216,7 @@ extension SearchResultTableViewCell { func config(with tag: Tag) { configure(with: AvatarConfigurableViewConfiguration(avatarImageURL: nil)) - let image = UIImage(systemName: "number.circle.fill", withConfiguration: UIImage.SymbolConfiguration(pointSize: 34, weight: .regular))!.withRenderingMode(.alwaysTemplate) - _imageView.image = image + setDisplayHashtagImage() let metaContent = PlaintextMetaContent(string: "#" + tag.name) _titleLabel.configure(content: metaContent) guard let histories = tag.histories?.sorted(by: { @@ -215,11 +232,23 @@ extension SearchResultTableViewCell { } } +extension SearchResultTableViewCell { + func setDisplayAvatarImage() { + avatarImageView.alpha = 1 + hashtagImageView.alpha = 0 + } + + func setDisplayHashtagImage() { + avatarImageView.alpha = 0 + hashtagImageView.alpha = 1 + } +} + // MARK: - AvatarStackedImageView extension SearchResultTableViewCell: AvatarConfigurableView { static var configurableAvatarImageSize: CGSize { CGSize(width: 42, height: 42) } static var configurableAvatarImageCornerRadius: CGFloat { 4 } - var configurableAvatarImageView: FLAnimatedImageView? { _imageView } + var configurableAvatarImageView: FLAnimatedImageView? { avatarImageView } } #if canImport(SwiftUI) && DEBUG @@ -231,7 +260,7 @@ struct SearchResultTableViewCell_Previews: PreviewProvider { UIViewPreview { let cell = SearchResultTableViewCell() cell.backgroundColor = .white - cell._imageView.image = UIImage(systemName: "number.circle.fill") + cell.setDisplayHashtagImage() cell._titleLabel.text = "Electronic Frontier Foundation" cell._subTitleLabel.text = "@eff@mastodon.social" return cell