diff --git a/suixinkan/UI/TravelAlbum/TravelAlbumPhotoPreviewViewController.swift b/suixinkan/UI/TravelAlbum/TravelAlbumPhotoPreviewViewController.swift index e65d65e..9f57596 100644 --- a/suixinkan/UI/TravelAlbum/TravelAlbumPhotoPreviewViewController.swift +++ b/suixinkan/UI/TravelAlbum/TravelAlbumPhotoPreviewViewController.swift @@ -52,6 +52,7 @@ final class TravelAlbumPhotoPreviewViewController: UIViewController { private let deleteButton = UIButton(type: .system) private let refreshButton = UIButton(type: .system) private var variantControlsHeightConstraint: Constraint? + private var variantSegmentedControlWidthConstraint: Constraint? private var didConfigureVariantControls = false private var showsVariantControls = false private var variantControlsAnimationGeneration = 0 @@ -168,14 +169,13 @@ final class TravelAlbumPhotoPreviewViewController: UIViewController { counterContainer.layer.cornerRadius = 17 counterContainer.clipsToBounds = true - variantSegmentedControl.selectedSegmentTintColor = UIColor(white: 0.22, alpha: 1) - variantSegmentedControl.backgroundColor = UIColor(white: 0.065, alpha: 1) + variantSegmentedControl.selectedSegmentTintColor = UIColor.white.withAlphaComponent(0.2) variantSegmentedControl.setTitleTextAttributes( - [.foregroundColor: UIColor.white.withAlphaComponent(0.62), .font: UIFont.systemFont(ofSize: 15)], + [.foregroundColor: UIColor.white.withAlphaComponent(0.7)], for: .normal ) variantSegmentedControl.setTitleTextAttributes( - [.foregroundColor: UIColor.white, .font: UIFont.systemFont(ofSize: 15, weight: .semibold)], + [.foregroundColor: UIColor.white], for: .selected ) variantSegmentedControl.accessibilityIdentifier = "travelAlbum.previewVariantSegmentedControl" @@ -258,8 +258,9 @@ final class TravelAlbumPhotoPreviewViewController: UIViewController { variantSegmentedControl.snp.makeConstraints { make in make.leading.equalToSuperview().offset(20) make.centerY.equalToSuperview() - make.height.equalTo(40) - make.trailing.equalTo(highResolutionButton.snp.leading).offset(-12) + variantSegmentedControlWidthConstraint = make.width.equalTo(124).constraint + make.height.equalTo(32) + make.trailing.lessThanOrEqualTo(highResolutionButton.snp.leading).offset(-12) } highResolutionButton.snp.makeConstraints { make in make.trailing.equalToSuperview().inset(18) @@ -406,6 +407,13 @@ final class TravelAlbumPhotoPreviewViewController: UIViewController { for (index, asset) in project.orderedAssets.enumerated() { variantSegmentedControl.insertSegment(withTitle: asset.kind.title, at: index, animated: false) } + let controlWidth: CGFloat + switch project.orderedAssets.count { + case 4: controlWidth = 220 + case 3: controlWidth = 180 + default: controlWidth = 124 + } + variantSegmentedControlWidthConstraint?.update(offset: controlWidth) variantSegmentedControl.selectedSegmentIndex = project.orderedAssets.firstIndex { $0.kind == activeKind } ?? 0 diff --git a/suixinkanTests/TravelAlbumDetailViewControllerTests.swift b/suixinkanTests/TravelAlbumDetailViewControllerTests.swift index 4b2a572..d92f3c0 100644 --- a/suixinkanTests/TravelAlbumDetailViewControllerTests.swift +++ b/suixinkanTests/TravelAlbumDetailViewControllerTests.swift @@ -328,6 +328,26 @@ final class TravelAlbumDetailViewControllerTests: XCTestCase { XCTAssertEqual(highResolutionButton.configuration?.title, "查看高清图") XCTAssertEqual(segmentedControl.numberOfSegments, 3) XCTAssertEqual(segmentedControl.selectedSegmentIndex, 0) + XCTAssertFalse(segmentedControl.apportionsSegmentWidthsByContent) + XCTAssertEqual(segmentedControl.selectedSegmentTintColor, UIColor.white.withAlphaComponent(0.2)) + XCTAssertEqual( + segmentedControl.titleTextAttributes(for: .normal)?[.foregroundColor] as? UIColor, + UIColor.white.withAlphaComponent(0.7) + ) + XCTAssertEqual( + segmentedControl.titleTextAttributes(for: .selected)?[.foregroundColor] as? UIColor, + UIColor.white + ) + XCTAssertNil(segmentedControl.backgroundImage(for: .selected, barMetrics: .default)) + XCTAssertNil( + segmentedControl.dividerImage( + forLeftSegmentState: .normal, + rightSegmentState: .normal, + barMetrics: .default + ) + ) + XCTAssertEqual(segmentedControl.bounds.size, CGSize(width: 180, height: 32)) + XCTAssertGreaterThanOrEqual(highResolutionButton.frame.minX - segmentedControl.frame.maxX, 12) XCTAssertEqual(backButton.bounds.size, CGSize(width: 44, height: 44)) XCTAssertNil(backButton.configuration?.baseBackgroundColor) XCTAssertEqual(actionStack.spacing, 10)