From 1f04726a7181d76788e12333d2f637f9c86322de Mon Sep 17 00:00:00 2001 From: Cleber Silva dos Reis Date: Thu, 13 Oct 2022 19:45:01 -0300 Subject: [PATCH 1/2] feat[feature/activityCell]: cell and snaptests ok --- .../FinanceApp.xcodeproj/project.pbxproj | 154 ++---------------- .../ActivityDetails/ActivityCellView.swift | 84 ++++++++++ .../ActivityCellViewTests.swift | 35 ++++ ...iew_ThenView_ShouldHaveValidSnapshot.1.png | Bin 0 -> 11250 bytes .../devsprint-caio-santos-7/Podfile.lock | 2 +- 5 files changed, 136 insertions(+), 139 deletions(-) create mode 100644 solutions/devsprint-caio-santos-7/FinanceApp/Screens/ActivityDetails/ActivityCellView.swift create mode 100644 solutions/devsprint-caio-santos-7/FinanceAppTests/Screens/ActivityDetails/ActivityCellViewTests.swift create mode 100644 solutions/devsprint-caio-santos-7/FinanceAppTests/Screens/ActivityDetails/__Snapshots__/ActivityCellViewTests/test_WhenInitActivityCellView_ThenView_ShouldHaveValidSnapshot.1.png diff --git a/solutions/devsprint-caio-santos-7/FinanceApp.xcodeproj/project.pbxproj b/solutions/devsprint-caio-santos-7/FinanceApp.xcodeproj/project.pbxproj index ac620ca..bb34066 100644 --- a/solutions/devsprint-caio-santos-7/FinanceApp.xcodeproj/project.pbxproj +++ b/solutions/devsprint-caio-santos-7/FinanceApp.xcodeproj/project.pbxproj @@ -36,7 +36,8 @@ 98C8A4E327C819DE00A630ED /* Contact.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98C8A4E227C819DE00A630ED /* Contact.swift */; }; 98C8A4E527C81A3F00A630ED /* TransferResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98C8A4E427C81A3F00A630ED /* TransferResult.swift */; }; 98C8A4E727C81A9C00A630ED /* UserProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98C8A4E627C81A9C00A630ED /* UserProfile.swift */; }; - A8A985E21DB09F86D3EECE24 /* Pods_FinanceApp_FinanceAppUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A5A6F294F414949861585C4 /* Pods_FinanceApp_FinanceAppUITests.framework */; }; + BFF7C39628F8C52900521C81 /* ActivityCellView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF7C39528F8C52900521C81 /* ActivityCellView.swift */; }; + BFF7C39928F8C72000521C81 /* ActivityCellViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF7C39828F8C72000521C81 /* ActivityCellViewTests.swift */; }; D7292043FD377209482E7A09 /* Pods_FinanceApp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55C4E25CA63BCFCC105EC051 /* Pods_FinanceApp.framework */; }; /* End PBXBuildFile section */ @@ -48,13 +49,6 @@ remoteGlobalIDString = 98584A68277E32C30028DBEA; remoteInfo = FinanceApp; }; - 98584A8A277E32C60028DBEA /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 98584A61277E32C30028DBEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 98584A68277E32C30028DBEA; - remoteInfo = FinanceApp; - }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ @@ -75,7 +69,6 @@ 98584A78277E32C50028DBEA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 98584A7A277E32C50028DBEA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 98584A7F277E32C60028DBEA /* FinanceAppTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FinanceAppTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 98584A89277E32C60028DBEA /* FinanceAppUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FinanceAppUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 98584AA4277E35E90028DBEA /* HomeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeViewController.swift; sourceTree = ""; }; 98584AA6277E35F10028DBEA /* HomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeView.swift; sourceTree = ""; }; 98584AC2277E42E80028DBEA /* FinanceService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FinanceService.swift; sourceTree = ""; }; @@ -98,6 +91,8 @@ 98C8A4E427C81A3F00A630ED /* TransferResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransferResult.swift; sourceTree = ""; }; 98C8A4E627C81A9C00A630ED /* UserProfile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserProfile.swift; sourceTree = ""; }; B1ABD9ED7D6A8881AE0663F0 /* Pods-FinanceAppTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FinanceAppTests.release.xcconfig"; path = "Target Support Files/Pods-FinanceAppTests/Pods-FinanceAppTests.release.xcconfig"; sourceTree = ""; }; + BFF7C39528F8C52900521C81 /* ActivityCellView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActivityCellView.swift; sourceTree = ""; }; + BFF7C39828F8C72000521C81 /* ActivityCellViewTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActivityCellViewTests.swift; sourceTree = ""; }; E0DAC424B947E017F740FDAF /* Pods-FinanceAppTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FinanceAppTests.debug.xcconfig"; path = "Target Support Files/Pods-FinanceAppTests/Pods-FinanceAppTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -118,14 +113,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 98584A86277E32C60028DBEA /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - A8A985E21DB09F86D3EECE24 /* Pods_FinanceApp_FinanceAppUITests.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -141,6 +128,7 @@ 25C8175228F772BE003127C0 /* Screens */ = { isa = PBXGroup; children = ( + BFF7C39728F8C6B000521C81 /* ActivityDetails */, 25C8175328F772C5003127C0 /* Components */, ); path = Screens; @@ -182,7 +170,6 @@ children = ( 98584A6B277E32C30028DBEA /* FinanceApp */, 98584A82277E32C60028DBEA /* FinanceAppTests */, - 98584A8C277E32C60028DBEA /* FinanceAppUITests */, 98584A6A277E32C30028DBEA /* Products */, 51E5AEA143646311ECCE5A29 /* Pods */, 820E387591A4D6261F2D6AF5 /* Frameworks */, @@ -194,7 +181,6 @@ children = ( 98584A69277E32C30028DBEA /* FinanceApp.app */, 98584A7F277E32C60028DBEA /* FinanceAppTests.xctest */, - 98584A89277E32C60028DBEA /* FinanceAppUITests.xctest */, ); name = Products; sourceTree = ""; @@ -221,13 +207,6 @@ path = FinanceAppTests; sourceTree = ""; }; - 98584A8C277E32C60028DBEA /* FinanceAppUITests */ = { - isa = PBXGroup; - children = ( - ); - path = FinanceAppUITests; - sourceTree = ""; - }; 98584A9C277E350D0028DBEA /* AppDelegate */ = { isa = PBXGroup; children = ( @@ -322,6 +301,7 @@ children = ( 98584B0E277E605F0028DBEA /* ActivityDetailsView.swift */, 98584B0A277E605F0028DBEA /* ActivityDetailsViewController.swift */, + BFF7C39528F8C52900521C81 /* ActivityCellView.swift */, ); path = ActivityDetails; sourceTree = ""; @@ -352,6 +332,14 @@ path = Extensions; sourceTree = ""; }; + BFF7C39728F8C6B000521C81 /* ActivityDetails */ = { + isa = PBXGroup; + children = ( + BFF7C39828F8C72000521C81 /* ActivityCellViewTests.swift */, + ); + path = ActivityDetails; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -393,25 +381,6 @@ productReference = 98584A7F277E32C60028DBEA /* FinanceAppTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; - 98584A88277E32C60028DBEA /* FinanceAppUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 98584A99277E32C60028DBEA /* Build configuration list for PBXNativeTarget "FinanceAppUITests" */; - buildPhases = ( - 393A39408D8B880CDB2FAB8A /* [CP] Check Pods Manifest.lock */, - 98584A85277E32C60028DBEA /* Sources */, - 98584A86277E32C60028DBEA /* Frameworks */, - 98584A87277E32C60028DBEA /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 98584A8B277E32C60028DBEA /* PBXTargetDependency */, - ); - name = FinanceAppUITests; - productName = FinanceAppUITests; - productReference = 98584A89277E32C60028DBEA /* FinanceAppUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -429,10 +398,6 @@ CreatedOnToolsVersion = 13.2.1; TestTargetID = 98584A68277E32C30028DBEA; }; - 98584A88277E32C60028DBEA = { - CreatedOnToolsVersion = 13.2.1; - TestTargetID = 98584A68277E32C30028DBEA; - }; }; }; buildConfigurationList = 98584A64277E32C30028DBEA /* Build configuration list for PBXProject "FinanceApp" */; @@ -450,7 +415,6 @@ targets = ( 98584A68277E32C30028DBEA /* FinanceApp */, 98584A7E277E32C60028DBEA /* FinanceAppTests */, - 98584A88277E32C60028DBEA /* FinanceAppUITests */, ); }; /* End PBXProject section */ @@ -472,13 +436,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 98584A87277E32C60028DBEA /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ @@ -504,28 +461,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 393A39408D8B880CDB2FAB8A /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-FinanceApp-FinanceAppUITests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 68BF10F55AF59FA516E57803 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -579,6 +514,7 @@ 98584B20277E60740028DBEA /* ContactListViewController.swift in Sources */, 98584AF4277E50430028DBEA /* ConfirmationViewController.swift in Sources */, 98C8A4DD27C818A800A630ED /* HomeData.swift in Sources */, + BFF7C39628F8C52900521C81 /* ActivityCellView.swift in Sources */, 98C8A4D927C8152200A630ED /* String+Extensions.swift in Sources */, 98C8A4E727C81A9C00A630ED /* UserProfile.swift in Sources */, 98C8A4E327C819DE00A630ED /* Contact.swift in Sources */, @@ -605,13 +541,7 @@ buildActionMask = 2147483647; files = ( 25C8175528F772FD003127C0 /* AccountSummaryViewTests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 98584A85277E32C60028DBEA /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( + BFF7C39928F8C72000521C81 /* ActivityCellViewTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -623,11 +553,6 @@ target = 98584A68277E32C30028DBEA /* FinanceApp */; targetProxy = 98584A80277E32C60028DBEA /* PBXContainerItemProxy */; }; - 98584A8B277E32C60028DBEA /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 98584A68277E32C30028DBEA /* FinanceApp */; - targetProxy = 98584A8A277E32C60028DBEA /* PBXContainerItemProxy */; - }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ @@ -858,44 +783,6 @@ }; name = Release; }; - 98584A9A277E32C60028DBEA /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 61A71CDF7B0095F152A3CD4E /* Pods-FinanceApp-FinanceAppUITests.debug.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = B8F644M47X; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.devpass.FinanceAppUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = FinanceApp; - }; - name = Debug; - }; - 98584A9B277E32C60028DBEA /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 6989344458FFDBA154C3EC32 /* Pods-FinanceApp-FinanceAppUITests.release.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = B8F644M47X; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.devpass.FinanceAppUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = FinanceApp; - }; - name = Release; - }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -926,15 +813,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 98584A99277E32C60028DBEA /* Build configuration list for PBXNativeTarget "FinanceAppUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 98584A9A277E32C60028DBEA /* Debug */, - 98584A9B277E32C60028DBEA /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; /* End XCConfigurationList section */ }; rootObject = 98584A61277E32C30028DBEA /* Project object */; diff --git a/solutions/devsprint-caio-santos-7/FinanceApp/Screens/ActivityDetails/ActivityCellView.swift b/solutions/devsprint-caio-santos-7/FinanceApp/Screens/ActivityDetails/ActivityCellView.swift new file mode 100644 index 0000000..6e932d0 --- /dev/null +++ b/solutions/devsprint-caio-santos-7/FinanceApp/Screens/ActivityDetails/ActivityCellView.swift @@ -0,0 +1,84 @@ +// +// ActivityCellView.swift +// FinanceApp +// +// Created by Cleber Reis on 13/10/22. +// + +import UIKit + +class ActivityCellView: UITableViewCell { + + private lazy var icon: UIImageView = { + let image = UIImageView() + image.translatesAutoresizingMaskIntoConstraints = false + image.image = UIImage(named: "fork.knife.circle.fill") + image.contentMode = .scaleAspectFit + image.layer.cornerRadius = 24 + image.clipsToBounds = true + + return image + }() + + private lazy var titleLabel: UILabel = { + let label = UILabel() + label.translatesAutoresizingMaskIntoConstraints = false + label.text = "Food court" + label.font = .systemFont(ofSize: 16, weight: .semibold) + + return label + }() + + private lazy var titleDescription: UILabel = { + let label = UILabel() + label.translatesAutoresizingMaskIntoConstraints = false + label.text = "R$ 1000 - 8:57" + label.font = .systemFont(ofSize: 14, weight: .regular) + + return label + }() + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + setupView() + configViews() + } + + @available(*, unavailable) + required init?(coder: NSCoder) { nil } +} + +extension ActivityCellView: ViewCodable { + + func configViews() { + backgroundColor = .white + } + + func buildHierarchy() { + contentView.addSubview(icon) + contentView.addSubview(titleLabel) + contentView.addSubview(titleDescription) + } + + + func setupConstraints() { + let bottomConstraint = icon.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -8) + bottomConstraint.priority = .defaultLow + + NSLayoutConstraint.activate([ + icon.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 8), + icon.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 8), + icon.heightAnchor.constraint(equalToConstant: 48), + icon.widthAnchor.constraint(equalToConstant: 48), + + titleLabel.bottomAnchor.constraint(equalTo: contentView.centerYAnchor), + titleLabel.leadingAnchor.constraint(equalTo: icon.trailingAnchor, constant: 12), + titleLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -8), + + titleDescription.topAnchor.constraint(equalTo: contentView.centerYAnchor), + titleDescription.leadingAnchor.constraint(equalTo: titleLabel.leadingAnchor), + titleDescription.trailingAnchor.constraint(equalTo: titleLabel.trailingAnchor), + bottomConstraint + ]) + } +} diff --git a/solutions/devsprint-caio-santos-7/FinanceAppTests/Screens/ActivityDetails/ActivityCellViewTests.swift b/solutions/devsprint-caio-santos-7/FinanceAppTests/Screens/ActivityDetails/ActivityCellViewTests.swift new file mode 100644 index 0000000..402ce37 --- /dev/null +++ b/solutions/devsprint-caio-santos-7/FinanceAppTests/Screens/ActivityDetails/ActivityCellViewTests.swift @@ -0,0 +1,35 @@ +// +// ActivityCellViewTests.swift +// FinanceAppTests +// +// Created by Cleber Reis on 13/10/22. +// + +import UIKit +import SnapshotTesting +import XCTest + +@testable import FinanceApp + +final class ActivityCellViewTests: XCTestCase { + + private var sut: ActivityCellView? + + override func setUp() { + + sut = ActivityCellView() + let frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 64) + sut?.frame = frame + + } + + func test_WhenInitActivityCellView_ThenView_ShouldHaveValidSnapshot() throws { + let unwrappedSut = try XCTUnwrap(sut) + assertSnapshot(matching: unwrappedSut, as: .image) + + } + + override func tearDown() { + sut = nil + } +} diff --git a/solutions/devsprint-caio-santos-7/FinanceAppTests/Screens/ActivityDetails/__Snapshots__/ActivityCellViewTests/test_WhenInitActivityCellView_ThenView_ShouldHaveValidSnapshot.1.png b/solutions/devsprint-caio-santos-7/FinanceAppTests/Screens/ActivityDetails/__Snapshots__/ActivityCellViewTests/test_WhenInitActivityCellView_ThenView_ShouldHaveValidSnapshot.1.png new file mode 100644 index 0000000000000000000000000000000000000000..2b49d4355da8536b1f077386d546ed5e2be729a6 GIT binary patch literal 11250 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 Date: Thu, 13 Oct 2022 20:09:57 -0300 Subject: [PATCH 2/2] =?UTF-8?q?feat[feature/activityCell]:=20corre=C3=A7?= =?UTF-8?q?=C3=A3o=20PR?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ActivityDetails/ActivityCellView.swift | 27 ++++++++++++------ ...iew_ThenView_ShouldHaveValidSnapshot.1.png | Bin 11250 -> 11267 bytes 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/solutions/devsprint-caio-santos-7/FinanceApp/Screens/ActivityDetails/ActivityCellView.swift b/solutions/devsprint-caio-santos-7/FinanceApp/Screens/ActivityDetails/ActivityCellView.swift index 6e932d0..519ab63 100644 --- a/solutions/devsprint-caio-santos-7/FinanceApp/Screens/ActivityDetails/ActivityCellView.swift +++ b/solutions/devsprint-caio-santos-7/FinanceApp/Screens/ActivityDetails/ActivityCellView.swift @@ -20,6 +20,15 @@ class ActivityCellView: UITableViewCell { return image }() + private lazy var stackView: UIStackView = { + let stack = UIStackView() + stack.translatesAutoresizingMaskIntoConstraints = false + stack.axis = .vertical + stack.spacing = 4 + + return stack + }() + private lazy var titleLabel: UILabel = { let label = UILabel() label.translatesAutoresizingMaskIntoConstraints = false @@ -56,14 +65,13 @@ extension ActivityCellView: ViewCodable { func buildHierarchy() { contentView.addSubview(icon) - contentView.addSubview(titleLabel) - contentView.addSubview(titleDescription) + contentView.addSubview(stackView) + stackView.addArrangedSubview(titleLabel) + stackView.addArrangedSubview(titleDescription) } func setupConstraints() { - let bottomConstraint = icon.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -8) - bottomConstraint.priority = .defaultLow NSLayoutConstraint.activate([ icon.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 8), @@ -71,14 +79,15 @@ extension ActivityCellView: ViewCodable { icon.heightAnchor.constraint(equalToConstant: 48), icon.widthAnchor.constraint(equalToConstant: 48), - titleLabel.bottomAnchor.constraint(equalTo: contentView.centerYAnchor), - titleLabel.leadingAnchor.constraint(equalTo: icon.trailingAnchor, constant: 12), - titleLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -8), + stackView.centerYAnchor.constraint(equalTo: contentView.centerYAnchor), + stackView.leadingAnchor.constraint(equalTo: icon.trailingAnchor, constant: 8), + stackView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -8), + + titleLabel.leadingAnchor.constraint(equalTo: stackView.trailingAnchor), + titleLabel.trailingAnchor.constraint(equalTo: stackView.trailingAnchor), - titleDescription.topAnchor.constraint(equalTo: contentView.centerYAnchor), titleDescription.leadingAnchor.constraint(equalTo: titleLabel.leadingAnchor), titleDescription.trailingAnchor.constraint(equalTo: titleLabel.trailingAnchor), - bottomConstraint ]) } } diff --git a/solutions/devsprint-caio-santos-7/FinanceAppTests/Screens/ActivityDetails/__Snapshots__/ActivityCellViewTests/test_WhenInitActivityCellView_ThenView_ShouldHaveValidSnapshot.1.png b/solutions/devsprint-caio-santos-7/FinanceAppTests/Screens/ActivityDetails/__Snapshots__/ActivityCellViewTests/test_WhenInitActivityCellView_ThenView_ShouldHaveValidSnapshot.1.png index 2b49d4355da8536b1f077386d546ed5e2be729a6..32da82369b1ad09758f978fbfc7e9c20fb3edd72 100644 GIT binary patch literal 11267 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