From 48b6b9be222695f1209c06aad16b5e2f59376dba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=89=E7=A7=8B?= <497055328@qq.com> Date: Thu, 13 Aug 2026 15:36:06 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E9=A2=84=E8=A7=88=E7=B4=A2=E5=BC=95=E8=83=B6=E5=9B=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ravelAlbumPhotoPreviewViewController.swift | 21 ++++++++++++----- ...TravelAlbumDetailViewControllerTests.swift | 23 +++++++++++++++++++ 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/suixinkan/UI/TravelAlbum/TravelAlbumPhotoPreviewViewController.swift b/suixinkan/UI/TravelAlbum/TravelAlbumPhotoPreviewViewController.swift index 59f7272..e65d65e 100644 --- a/suixinkan/UI/TravelAlbum/TravelAlbumPhotoPreviewViewController.swift +++ b/suixinkan/UI/TravelAlbum/TravelAlbumPhotoPreviewViewController.swift @@ -41,6 +41,7 @@ final class TravelAlbumPhotoPreviewViewController: UIViewController { private let closeButton = UIButton(type: .system) private let titleLabel = UILabel() private let sizeLabel = UILabel() + private let counterContainer = UIView() private let counterLabel = UILabel() private let bottomChrome = UIView() private let divider = UIView() @@ -159,10 +160,13 @@ final class TravelAlbumPhotoPreviewViewController: UIViewController { counterLabel.textColor = UIColor.white.withAlphaComponent(0.82) counterLabel.font = .monospacedDigitSystemFont(ofSize: 15, weight: .medium) counterLabel.textAlignment = .center - counterLabel.backgroundColor = UIColor(white: 0.11, alpha: 1) - counterLabel.layer.cornerRadius = 17 - counterLabel.clipsToBounds = true + counterLabel.numberOfLines = 1 + counterLabel.accessibilityIdentifier = "travelAlbum.previewCounterLabel" + counterLabel.setContentHuggingPriority(.required, for: .horizontal) counterLabel.setContentCompressionResistancePriority(.required, for: .horizontal) + counterContainer.backgroundColor = UIColor(white: 0.11, alpha: 1) + counterContainer.layer.cornerRadius = 17 + counterContainer.clipsToBounds = true variantSegmentedControl.selectedSegmentTintColor = UIColor(white: 0.22, alpha: 1) variantSegmentedControl.backgroundColor = UIColor(white: 0.065, alpha: 1) @@ -200,7 +204,8 @@ final class TravelAlbumPhotoPreviewViewController: UIViewController { view.addSubview(topChrome) topChrome.addSubview(closeButton) topChrome.addSubview(titleStack) - topChrome.addSubview(counterLabel) + topChrome.addSubview(counterContainer) + counterContainer.addSubview(counterLabel) view.addSubview(bottomChrome) bottomChrome.addSubview(divider) bottomChrome.addSubview(variantControls) @@ -217,16 +222,20 @@ final class TravelAlbumPhotoPreviewViewController: UIViewController { make.bottom.equalToSuperview().offset(-14) make.size.equalTo(44) } - counterLabel.snp.makeConstraints { make in + counterContainer.snp.makeConstraints { make in make.trailing.equalToSuperview().inset(16) make.centerY.equalTo(closeButton) make.width.greaterThanOrEqualTo(48) make.height.equalTo(34) } + counterLabel.snp.makeConstraints { make in + make.leading.trailing.equalToSuperview().inset(12) + make.centerY.equalToSuperview() + } titleStack.snp.makeConstraints { make in make.centerY.equalTo(closeButton) make.leading.greaterThanOrEqualTo(closeButton.snp.trailing).offset(8) - make.trailing.lessThanOrEqualTo(counterLabel.snp.leading).offset(-8) + make.trailing.lessThanOrEqualTo(counterContainer.snp.leading).offset(-8) make.centerX.equalToSuperview() make.width.lessThanOrEqualTo(220) } diff --git a/suixinkanTests/TravelAlbumDetailViewControllerTests.swift b/suixinkanTests/TravelAlbumDetailViewControllerTests.swift index 84d8d62..4b2a572 100644 --- a/suixinkanTests/TravelAlbumDetailViewControllerTests.swift +++ b/suixinkanTests/TravelAlbumDetailViewControllerTests.swift @@ -67,6 +67,29 @@ final class TravelAlbumDetailViewControllerTests: XCTestCase { XCTAssertEqual(failure, .failure("服务暂不可用")) } + func testPreviewCounterUsesHorizontalPaddingAndContentDrivenWidth() throws { + let controller = TravelAlbumPhotoPreviewViewController( + projects: [makePreviewProject(id: 1, fileName: "原图.jpg")], + totalCount: 10_000, + startProjectIndex: 0 + ) + controller.loadViewIfNeeded() + controller.view.frame = CGRect(x: 0, y: 0, width: 390, height: 844) + controller.view.layoutIfNeeded() + + let counterLabel = try XCTUnwrap( + controller.view.findSubview { + $0.accessibilityIdentifier == "travelAlbum.previewCounterLabel" + } as? UILabel + ) + let counterContainer = try XCTUnwrap(counterLabel.superview) + let expectedWidth = max(48, counterLabel.intrinsicContentSize.width + 24) + + XCTAssertEqual(counterContainer.bounds.width, expectedWidth, accuracy: 0.5) + XCTAssertEqual(counterLabel.frame.minX, 12, accuracy: 0.5) + XCTAssertEqual(counterContainer.bounds.width - counterLabel.frame.maxX, 12, accuracy: 0.5) + } + func testPreviewSuccessfulDeletionShowsNextProjectAndPreventsDuplicateRequests() async throws { let api = TravelAlbumMockAPI() api.deleteMaterialDelayNanoseconds = 1_000_000