fix: 优化AI修图标签显示

This commit is contained in:
2026-08-13 15:27:13 +08:00
parent 7b9e630838
commit 202b0f5e41
2 changed files with 26 additions and 24 deletions
@@ -285,7 +285,7 @@ final class TravelAlbumAIRetouchTemplateViewController: BaseViewController {
title: category.title, title: category.title,
badge: category == .cover badge: category == .cover
? .gift ? .gift
: (self.viewModel.isOptional(category) ? .optional : .required) : (self.viewModel.isOptional(category) ? .optional : nil)
) )
case .mode: case .mode:
return nil return nil
@@ -840,7 +840,6 @@ final class TravelAlbumAIRetouchModeCell: UICollectionViewCell {
/// 模板分组标题右侧的业务标记。 /// 模板分组标题右侧的业务标记。
fileprivate enum AIRetouchTemplateSectionBadge { fileprivate enum AIRetouchTemplateSectionBadge {
case required
case optional case optional
case gift case gift
} }
@@ -850,30 +849,36 @@ final class TravelAlbumAIRetouchSectionHeader: UICollectionReusableView {
static let reuseIdentifier = "TravelAlbumAIRetouchSectionHeader" static let reuseIdentifier = "TravelAlbumAIRetouchSectionHeader"
private let titleLabel = UILabel() private let titleLabel = UILabel()
private let optionalLabel = UILabel() private let badgeContainer = UIView()
private let badgeLabel = UILabel()
override init(frame: CGRect) { override init(frame: CGRect) {
super.init(frame: frame) super.init(frame: frame)
titleLabel.font = .systemFont(ofSize: 17, weight: .semibold) titleLabel.font = .systemFont(ofSize: 17, weight: .semibold)
titleLabel.textColor = AIRetouchTemplateStyle.textPrimary titleLabel.textColor = AIRetouchTemplateStyle.textPrimary
optionalLabel.font = .systemFont(ofSize: 11, weight: .medium) badgeContainer.layer.cornerRadius = 10
optionalLabel.textAlignment = .center badgeContainer.clipsToBounds = true
optionalLabel.layer.cornerRadius = 10 badgeLabel.font = .systemFont(ofSize: 11, weight: .medium)
optionalLabel.clipsToBounds = true badgeLabel.textAlignment = .center
badgeLabel.numberOfLines = 1
addSubview(titleLabel) addSubview(titleLabel)
addSubview(optionalLabel) addSubview(badgeContainer)
badgeContainer.addSubview(badgeLabel)
titleLabel.snp.makeConstraints { make in titleLabel.snp.makeConstraints { make in
make.leading.equalToSuperview().offset(18) make.leading.equalToSuperview().offset(18)
make.centerY.equalToSuperview() make.centerY.equalToSuperview()
} }
optionalLabel.snp.makeConstraints { make in badgeContainer.snp.makeConstraints { make in
make.leading.equalTo(titleLabel.snp.trailing).offset(8) make.leading.equalTo(titleLabel.snp.trailing).offset(8)
make.centerY.equalTo(titleLabel) make.centerY.equalTo(titleLabel)
make.width.greaterThanOrEqualTo(38)
make.height.equalTo(20) make.height.equalTo(20)
make.trailing.lessThanOrEqualToSuperview().offset(-18) make.trailing.lessThanOrEqualToSuperview().offset(-18)
} }
badgeLabel.snp.makeConstraints { make in
make.leading.trailing.equalToSuperview().inset(9)
make.centerY.equalToSuperview()
}
} }
@available(*, unavailable) @available(*, unavailable)
@@ -884,24 +889,20 @@ final class TravelAlbumAIRetouchSectionHeader: UICollectionReusableView {
/// 更新分组标题与业务标记。 /// 更新分组标题与业务标记。
fileprivate func apply(title: String, badge: AIRetouchTemplateSectionBadge?) { fileprivate func apply(title: String, badge: AIRetouchTemplateSectionBadge?) {
titleLabel.text = title titleLabel.text = title
optionalLabel.isHidden = badge == nil badgeContainer.isHidden = badge == nil
switch badge { switch badge {
case .required:
optionalLabel.text = " 必选 "
optionalLabel.textColor = AIRetouchTemplateStyle.primary
optionalLabel.backgroundColor = AIRetouchTemplateStyle.primary.withAlphaComponent(0.1)
case .optional: case .optional:
optionalLabel.text = " 选填 " badgeLabel.text = "选填"
optionalLabel.textColor = AIRetouchTemplateStyle.primary badgeLabel.textColor = AIRetouchTemplateStyle.primary
optionalLabel.backgroundColor = AIRetouchTemplateStyle.primary.withAlphaComponent(0.1) badgeContainer.backgroundColor = AIRetouchTemplateStyle.primary.withAlphaComponent(0.1)
case .gift: case .gift:
optionalLabel.text = " 赠送 · 不占额度 " badgeLabel.text = "赠送 · 不占额度"
optionalLabel.textColor = AIRetouchTemplateStyle.gift badgeLabel.textColor = AIRetouchTemplateStyle.gift
optionalLabel.backgroundColor = AIRetouchTemplateStyle.giftBackground badgeContainer.backgroundColor = AIRetouchTemplateStyle.giftBackground
case nil: case nil:
optionalLabel.text = nil badgeLabel.text = nil
} }
let badgeText = optionalLabel.text?.trimmingCharacters(in: .whitespaces) let badgeText = badgeLabel.text
accessibilityLabel = badgeText.map { "\(title),\($0)" } ?? title accessibilityLabel = badgeText.map { "\(title),\($0)" } ?? title
accessibilityTraits = .header accessibilityTraits = .header
} }
@@ -536,7 +536,8 @@ final class TravelAlbumDetailViewControllerTests: XCTestCase {
} as? UICollectionView } as? UICollectionView
) )
let accessibleLabels = controller.view.allAccessibilityLabels() let accessibleLabels = controller.view.allAccessibilityLabels()
XCTAssertTrue(accessibleLabels.contains("原图精修,必选")) XCTAssertTrue(accessibleLabels.contains("原图精修"))
XCTAssertFalse(accessibleLabels.contains("原图精修,必选"))
XCTAssertTrue(accessibleLabels.contains("氛围感修图,选填")) XCTAssertTrue(accessibleLabels.contains("氛围感修图,选填"))
XCTAssertTrue(accessibleLabels.contains("封面风格,赠送 · 不占额度")) XCTAssertTrue(accessibleLabels.contains("封面风格,赠送 · 不占额度"))