diff --git a/Sources/Earthquake Network/Controllers/Alerts/Cells/AlertsNoLocationTableViewCell.swift b/Sources/Earthquake Network/Controllers/Alerts/Cells/AlertsNoLocationTableViewCell.swift index 93a7c1c..4c30965 100644 --- a/Sources/Earthquake Network/Controllers/Alerts/Cells/AlertsNoLocationTableViewCell.swift +++ b/Sources/Earthquake Network/Controllers/Alerts/Cells/AlertsNoLocationTableViewCell.swift @@ -38,15 +38,15 @@ class AlertsNoLocationTableViewCell: EQNBaseContainerTableViewCell { containerView.addSubview(messageLabel) containerView.addSubview(actionButton) - messageLabel.topAnchor.constraint(equalTo: topView.bottomAnchor, constant: Self.DefaultVerticalSpacing).isActive = true - messageLabel.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: Self.DefaultPadding).isActive = true - messageLabel.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: -Self.DefaultPadding).isActive = true + messageLabel.topAnchor.constraint(equalTo: topView.bottomAnchor, constant: .cardVerticalSpacing).isActive = true + messageLabel.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: .cardPadding).isActive = true + messageLabel.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: .cardPadding.negative).isActive = true actionButton.heightAnchor.constraint(greaterThanOrEqualToConstant: 40.0).isActive = true - actionButton.topAnchor.constraint(equalTo: messageLabel.bottomAnchor, constant: Self.DefaultPadding).isActive = true + actionButton.topAnchor.constraint(equalTo: messageLabel.bottomAnchor, constant: .cardPadding).isActive = true actionButton.leadingAnchor.constraint(equalTo: messageLabel.leadingAnchor).isActive = true actionButton.trailingAnchor.constraint(equalTo: messageLabel.trailingAnchor).isActive = true - actionButton.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: -Self.DefaultPadding).isActive = true + actionButton.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: .cardPadding.negative).isActive = true } override func updateUI() { diff --git a/Sources/Earthquake Network/Controllers/Alerts/Cells/AlertsPastEartquakesTableViewCell.swift b/Sources/Earthquake Network/Controllers/Alerts/Cells/AlertsPastEartquakesTableViewCell.swift index 1ecfd92..4669696 100644 --- a/Sources/Earthquake Network/Controllers/Alerts/Cells/AlertsPastEartquakesTableViewCell.swift +++ b/Sources/Earthquake Network/Controllers/Alerts/Cells/AlertsPastEartquakesTableViewCell.swift @@ -53,19 +53,19 @@ class AlertsPastEartquakesTableViewCell: EQNBaseContainerTableViewCell { containerView.addSubview(from2013Label) containerView.addSubview(mapButton) - last24hLabel.topAnchor.constraint(equalTo: topView.bottomAnchor, constant: Self.DefaultVerticalSpacing).isActive = true - last24hLabel.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: Self.DefaultPadding).isActive = true - last24hLabel.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: -Self.DefaultPadding).isActive = true + last24hLabel.topAnchor.constraint(equalTo: topView.bottomAnchor, constant: .cardVerticalSpacing).isActive = true + last24hLabel.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: .cardPadding).isActive = true + last24hLabel.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: .cardPadding.negative).isActive = true - from2013Label.topAnchor.constraint(equalTo: last24hLabel.bottomAnchor, constant: Self.DefaultVerticalSpacing).isActive = true + from2013Label.topAnchor.constraint(equalTo: last24hLabel.bottomAnchor, constant: .cardVerticalSpacing).isActive = true from2013Label.leadingAnchor.constraint(equalTo: last24hLabel.leadingAnchor).isActive = true from2013Label.trailingAnchor.constraint(equalTo: last24hLabel.trailingAnchor).isActive = true mapButton.heightAnchor.constraint(greaterThanOrEqualToConstant: 40.0).isActive = true - mapButton.topAnchor.constraint(equalTo: from2013Label.bottomAnchor, constant: Self.DefaultVerticalSpacing).isActive = true + mapButton.topAnchor.constraint(equalTo: from2013Label.bottomAnchor, constant: .cardVerticalSpacing).isActive = true mapButton.leadingAnchor.constraint(equalTo: from2013Label.leadingAnchor).isActive = true mapButton.trailingAnchor.constraint(equalTo: from2013Label.trailingAnchor).isActive = true - mapButton.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: -Self.DefaultPadding).isActive = true + mapButton.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: .cardPadding.negative).isActive = true } override func updateUI() { diff --git a/Sources/Earthquake Network/Controllers/Alerts/Cells/AlertsPositionDataTableViewCell.swift b/Sources/Earthquake Network/Controllers/Alerts/Cells/AlertsPositionDataTableViewCell.swift index 58421e1..2e41e64 100644 --- a/Sources/Earthquake Network/Controllers/Alerts/Cells/AlertsPositionDataTableViewCell.swift +++ b/Sources/Earthquake Network/Controllers/Alerts/Cells/AlertsPositionDataTableViewCell.swift @@ -89,24 +89,24 @@ class AlertsPositionDataTableViewCell: EQNBaseContainerTableViewCell { containerView.addSubview(sunsetImage) containerView.addSubview(sunsetTimeLabel) - positionImage.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: Self.DefaultPadding).isActive = true + positionImage.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: .cardPadding).isActive = true positionImage.centerYAnchor.constraint(equalTo: positionLabel.centerYAnchor).isActive = true - positionImage.trailingAnchor.constraint(equalTo: positionLabel.leadingAnchor, constant: -Self.DefaultPadding).isActive = true - positionLabel.topAnchor.constraint(equalTo: topView.bottomAnchor, constant: Self.DefaultVerticalSpacing).isActive = true - positionLabel.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: -Self.DefaultPadding).isActive = true + positionImage.trailingAnchor.constraint(equalTo: positionLabel.leadingAnchor, constant: .cardPadding.negative).isActive = true + positionLabel.topAnchor.constraint(equalTo: topView.bottomAnchor, constant: .cardVerticalSpacing).isActive = true + positionLabel.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: .cardPadding.negative).isActive = true sunriseImage.leadingAnchor.constraint(equalTo: positionImage.leadingAnchor).isActive = true sunriseImage.centerYAnchor.constraint(equalTo: sunriseTimeLabel.centerYAnchor).isActive = true - sunriseImage.trailingAnchor.constraint(equalTo: sunriseTimeLabel.leadingAnchor, constant: -Self.DefaultPadding).isActive = true - sunriseTimeLabel.topAnchor.constraint(equalTo: positionLabel.bottomAnchor, constant: Self.DefaultVerticalSpacing).isActive = true + sunriseImage.trailingAnchor.constraint(equalTo: sunriseTimeLabel.leadingAnchor, constant: .cardPadding.negative).isActive = true + sunriseTimeLabel.topAnchor.constraint(equalTo: positionLabel.bottomAnchor, constant: .cardVerticalSpacing).isActive = true sunriseTimeLabel.trailingAnchor.constraint(equalTo: positionLabel.trailingAnchor).isActive = true sunsetImage.leadingAnchor.constraint(equalTo: sunriseImage.leadingAnchor).isActive = true sunsetImage.centerYAnchor.constraint(equalTo: sunsetTimeLabel.centerYAnchor).isActive = true - sunsetImage.trailingAnchor.constraint(equalTo: sunsetTimeLabel.leadingAnchor, constant: -Self.DefaultPadding).isActive = true - sunsetTimeLabel.topAnchor.constraint(equalTo: sunriseTimeLabel.bottomAnchor, constant: Self.DefaultVerticalSpacing).isActive = true + sunsetImage.trailingAnchor.constraint(equalTo: sunsetTimeLabel.leadingAnchor, constant: .cardPadding.negative).isActive = true + sunsetTimeLabel.topAnchor.constraint(equalTo: sunriseTimeLabel.bottomAnchor, constant: .cardVerticalSpacing).isActive = true sunsetTimeLabel.trailingAnchor.constraint(equalTo: sunriseTimeLabel.trailingAnchor).isActive = true - sunsetTimeLabel.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: -Self.DefaultPadding).isActive = true + sunsetTimeLabel.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: .cardPadding.negative).isActive = true } override func updateUI() { diff --git a/Sources/Earthquake Network/Controllers/Alerts/Cells/AlertsPriorityServiceTableViewCell.swift b/Sources/Earthquake Network/Controllers/Alerts/Cells/AlertsPriorityServiceTableViewCell.swift index e4731a5..ae5bc3f 100644 --- a/Sources/Earthquake Network/Controllers/Alerts/Cells/AlertsPriorityServiceTableViewCell.swift +++ b/Sources/Earthquake Network/Controllers/Alerts/Cells/AlertsPriorityServiceTableViewCell.swift @@ -41,14 +41,14 @@ class AlertsPriorityServiceTableViewCell: EQNBaseContainerTableViewCell { containerView.addSubview(descriptionLabel) containerView.addSubview(lastSubscriptionLabel) - descriptionLabel.topAnchor.constraint(equalTo: topView.bottomAnchor, constant: Self.DefaultVerticalSpacing).isActive = true - descriptionLabel.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: Self.DefaultPadding).isActive = true - descriptionLabel.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: -Self.DefaultPadding).isActive = true + descriptionLabel.topAnchor.constraint(equalTo: topView.bottomAnchor, constant: .cardVerticalSpacing).isActive = true + descriptionLabel.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: .cardPadding).isActive = true + descriptionLabel.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: .cardPadding.negative).isActive = true - lastSubscriptionLabel.topAnchor.constraint(equalTo: descriptionLabel.bottomAnchor, constant: Self.DefaultVerticalSpacing/2.0).isActive = true + lastSubscriptionLabel.topAnchor.constraint(equalTo: descriptionLabel.bottomAnchor, constant: .cardVerticalSpacing/2.0).isActive = true lastSubscriptionLabel.leadingAnchor.constraint(equalTo: descriptionLabel.leadingAnchor).isActive = true lastSubscriptionLabel.trailingAnchor.constraint(equalTo: descriptionLabel.trailingAnchor).isActive = true - lastSubscriptionLabel.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: -Self.DefaultPadding).isActive = true + lastSubscriptionLabel.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: .cardPadding.negative).isActive = true } override func updateUI() { diff --git a/Sources/Earthquake Network/Controllers/Alerts/Cells/AlertsSeismicNotificationCompactTableViewCell.swift b/Sources/Earthquake Network/Controllers/Alerts/Cells/AlertsSeismicNotificationCompactTableViewCell.swift index 6878653..c246427 100644 --- a/Sources/Earthquake Network/Controllers/Alerts/Cells/AlertsSeismicNotificationCompactTableViewCell.swift +++ b/Sources/Earthquake Network/Controllers/Alerts/Cells/AlertsSeismicNotificationCompactTableViewCell.swift @@ -64,29 +64,29 @@ class AlertsSeismicNotificationCompactTableViewCell: EQNBaseContainerTableViewCe containerView.addSubview(howItWorksAlertButton) containerView.addSubview(shareAppButton) - descriptionLabel.topAnchor.constraint(equalTo: topView.bottomAnchor, constant: Self.DefaultPadding).isActive = true - descriptionLabel.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: Self.DefaultPadding).isActive = true - descriptionLabel.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: -Self.DefaultPadding).isActive = true + descriptionLabel.topAnchor.constraint(equalTo: topView.bottomAnchor, constant: .cardPadding).isActive = true + descriptionLabel.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: .cardPadding).isActive = true + descriptionLabel.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: .cardPadding.negative).isActive = true testAlertButton.heightAnchor.constraint(greaterThanOrEqualToConstant: 40.0).isActive = true simulatorAlertButton.heightAnchor.constraint(equalTo: testAlertButton.heightAnchor).isActive = true howItWorksAlertButton.heightAnchor.constraint(equalTo: testAlertButton.heightAnchor).isActive = true shareAppButton.heightAnchor.constraint(equalTo: testAlertButton.heightAnchor).isActive = true - testAlertButton.topAnchor.constraint(equalTo: descriptionLabel.bottomAnchor, constant: Self.DefaultVerticalSpacing).isActive = true + testAlertButton.topAnchor.constraint(equalTo: descriptionLabel.bottomAnchor, constant: .cardVerticalSpacing).isActive = true testAlertButton.leadingAnchor.constraint(equalTo: descriptionLabel.leadingAnchor).isActive = true - testAlertButton.trailingAnchor.constraint(equalTo: simulatorAlertButton.leadingAnchor, constant: -Self.DefaultPadding).isActive = true + testAlertButton.trailingAnchor.constraint(equalTo: simulatorAlertButton.leadingAnchor, constant: .cardPadding.negative).isActive = true simulatorAlertButton.trailingAnchor.constraint(equalTo: descriptionLabel.trailingAnchor).isActive = true simulatorAlertButton.centerYAnchor.constraint(equalTo: testAlertButton.centerYAnchor).isActive = true simulatorAlertButton.widthAnchor.constraint(equalTo: testAlertButton.widthAnchor).isActive = true - howItWorksAlertButton.topAnchor.constraint(equalTo: testAlertButton.bottomAnchor, constant: Self.DefaultVerticalSpacing).isActive = true + howItWorksAlertButton.topAnchor.constraint(equalTo: testAlertButton.bottomAnchor, constant: .cardVerticalSpacing).isActive = true howItWorksAlertButton.leadingAnchor.constraint(equalTo: testAlertButton.leadingAnchor).isActive = true - howItWorksAlertButton.trailingAnchor.constraint(equalTo: shareAppButton.leadingAnchor, constant: -Self.DefaultPadding).isActive = true + howItWorksAlertButton.trailingAnchor.constraint(equalTo: shareAppButton.leadingAnchor, constant: .cardPadding.negative).isActive = true shareAppButton.trailingAnchor.constraint(equalTo: descriptionLabel.trailingAnchor).isActive = true shareAppButton.centerYAnchor.constraint(equalTo: howItWorksAlertButton.centerYAnchor).isActive = true shareAppButton.widthAnchor.constraint(equalTo: howItWorksAlertButton.widthAnchor).isActive = true - shareAppButton.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: -Self.DefaultPadding).isActive = true + shareAppButton.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: .cardPadding.negative).isActive = true } override func updateUI() { diff --git a/Sources/Earthquake Network/Controllers/Alerts/Cells/AlertsSmartphoneNetworkTableViewCell.swift b/Sources/Earthquake Network/Controllers/Alerts/Cells/AlertsSmartphoneNetworkTableViewCell.swift index b09bbae..1e9ea86 100644 --- a/Sources/Earthquake Network/Controllers/Alerts/Cells/AlertsSmartphoneNetworkTableViewCell.swift +++ b/Sources/Earthquake Network/Controllers/Alerts/Cells/AlertsSmartphoneNetworkTableViewCell.swift @@ -51,19 +51,19 @@ class AlertsSmartphoneNetworkTableViewCell: EQNBaseContainerTableViewCell { containerView.addSubview(descriptionLabel) containerView.addSubview(coverageButton) - counterLabel.topAnchor.constraint(equalTo: topView.bottomAnchor, constant: Self.DefaultVerticalSpacing).isActive = true - counterLabel.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: Self.DefaultPadding).isActive = true - counterLabel.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: -Self.DefaultPadding).isActive = true + counterLabel.topAnchor.constraint(equalTo: topView.bottomAnchor, constant: .cardVerticalSpacing).isActive = true + counterLabel.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: .cardPadding).isActive = true + counterLabel.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: .cardPadding.negative).isActive = true - descriptionLabel.topAnchor.constraint(equalTo: counterLabel.bottomAnchor, constant: Self.DefaultVerticalSpacing).isActive = true - descriptionLabel.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: Self.DefaultPadding).isActive = true - descriptionLabel.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: -Self.DefaultPadding).isActive = true + descriptionLabel.topAnchor.constraint(equalTo: counterLabel.bottomAnchor, constant: .cardVerticalSpacing).isActive = true + descriptionLabel.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: .cardPadding).isActive = true + descriptionLabel.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: .cardPadding.negative).isActive = true coverageButton.heightAnchor.constraint(greaterThanOrEqualToConstant: 40.0).isActive = true - coverageButton.topAnchor.constraint(equalTo: descriptionLabel.bottomAnchor, constant: Self.DefaultVerticalSpacing).isActive = true - coverageButton.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: Self.DefaultPadding).isActive = true - coverageButton.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: -Self.DefaultPadding).isActive = true - coverageButton.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: -Self.DefaultPadding).isActive = true + coverageButton.topAnchor.constraint(equalTo: descriptionLabel.bottomAnchor, constant: .cardVerticalSpacing).isActive = true + coverageButton.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: .cardPadding).isActive = true + coverageButton.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: .cardPadding.negative).isActive = true + coverageButton.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: .cardPadding.negative).isActive = true } override func updateUI() { diff --git a/Sources/Earthquake Network/Controllers/InApp/SubscriptionsActiveTableViewCell.swift b/Sources/Earthquake Network/Controllers/InApp/SubscriptionsActiveTableViewCell.swift index f5affd1..eb9b43d 100644 --- a/Sources/Earthquake Network/Controllers/InApp/SubscriptionsActiveTableViewCell.swift +++ b/Sources/Earthquake Network/Controllers/InApp/SubscriptionsActiveTableViewCell.swift @@ -48,10 +48,10 @@ class SubscriptionsActiveTableViewCell: EQNBaseContainerTableViewCell { activeSubscriptionImageView.widthAnchor.constraint(equalToConstant: 150.0).isActive = true activeSubscriptionImageView.heightAnchor.constraint(equalToConstant: 50.0).isActive = true - stackView.topAnchor.constraint(equalTo: topView.bottomAnchor, constant: Self.DefaultVerticalSpacing).isActive = true - stackView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: Self.DefaultPadding).isActive = true - stackView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: -Self.DefaultPadding).isActive = true - stackView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: -Self.DefaultVerticalSpacing).isActive = true + stackView.topAnchor.constraint(equalTo: topView.bottomAnchor, constant: .cardVerticalSpacing).isActive = true + stackView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: .cardPadding).isActive = true + stackView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: .cardPadding.negative).isActive = true + stackView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: .cardVerticalSpacing.negative).isActive = true } override func updateUI() { diff --git a/Sources/Earthquake Network/Controllers/InApp/SubscriptionsDescriptionTableViewCell.swift b/Sources/Earthquake Network/Controllers/InApp/SubscriptionsDescriptionTableViewCell.swift index e6e2137..a99766d 100644 --- a/Sources/Earthquake Network/Controllers/InApp/SubscriptionsDescriptionTableViewCell.swift +++ b/Sources/Earthquake Network/Controllers/InApp/SubscriptionsDescriptionTableViewCell.swift @@ -33,10 +33,10 @@ class SubscriptionsDescriptionTableViewCell: EQNBaseContainerTableViewCell { containerView.addSubview(descriptionLabel) - descriptionLabel.topAnchor.constraint(equalTo: topView.bottomAnchor, constant: Self.DefaultVerticalSpacing).isActive = true - descriptionLabel.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: Self.DefaultPadding).isActive = true - descriptionLabel.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: -Self.DefaultPadding).isActive = true - descriptionLabel.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: -Self.DefaultVerticalSpacing).isActive = true + descriptionLabel.topAnchor.constraint(equalTo: topView.bottomAnchor, constant: .cardVerticalSpacing).isActive = true + descriptionLabel.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: .cardPadding).isActive = true + descriptionLabel.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: .cardPadding.negative).isActive = true + descriptionLabel.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: .cardVerticalSpacing.negative).isActive = true } override func updateUI() { diff --git a/Sources/Earthquake Network/Libs/Extensions/Foundation+Extensions.swift b/Sources/Earthquake Network/Libs/Extensions/Foundation+Extensions.swift index 1ec952f..ba9634e 100644 --- a/Sources/Earthquake Network/Libs/Extensions/Foundation+Extensions.swift +++ b/Sources/Earthquake Network/Libs/Extensions/Foundation+Extensions.swift @@ -26,3 +26,10 @@ extension NSDate { return (self as Date).isBeforeInterval(interval) } } + + +extension CGFloat { + var negative: CGFloat { + -self + } +} diff --git a/Sources/Earthquake Network/UI/EQNBaseContainerTableViewCell.swift b/Sources/Earthquake Network/UI/EQNBaseContainerTableViewCell.swift index 233e109..b1c0343 100644 --- a/Sources/Earthquake Network/UI/EQNBaseContainerTableViewCell.swift +++ b/Sources/Earthquake Network/UI/EQNBaseContainerTableViewCell.swift @@ -8,11 +8,19 @@ import UIKit +extension CGFloat { + fileprivate static let cardVerticalMargin: CGFloat = 4.0 + fileprivate static let cardHorizontalMargin: CGFloat = 8.0 + + /// Padding between the card border and the internal content + static let cardPadding: CGFloat = 8.0 + /// Spacing between items inside a card + static let cardVerticalSpacing: CGFloat = 10.0 +} class EQNBaseContainerTableViewCell: UITableViewCell { - - static let DefaultVerticalSpacing: CGFloat = 10.0 - static let DefaultPadding: CGFloat = 8.0 + + // MARK: - UI lazy var containerView: UIView = { let view = UIView(frame: .zero) @@ -44,11 +52,14 @@ class EQNBaseContainerTableViewCell: UITableViewCell { return view }() + /// Returns the top view to use to attach descendant constraints var topView: UIView { isHeaderVisible ? headerLabel : emptyTopView } + /// If `true` an header on the top left corner will be visible var isHeaderVisible: Bool { true } + /// Text to display inside the header var headerText: String { "" } // MARK: - Init @@ -73,10 +84,10 @@ class EQNBaseContainerTableViewCell: UITableViewCell { contentView.addSubview(containerView) - containerView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 4.0).isActive = true - containerView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -8.0).isActive = true - containerView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 8.0).isActive = true - containerView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -4.0).isActive = true + containerView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: .cardVerticalMargin).isActive = true + containerView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: .cardHorizontalMargin.negative).isActive = true + containerView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: .cardHorizontalMargin).isActive = true + containerView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: .cardVerticalMargin.negative).isActive = true if isHeaderVisible { containerView.addSubview(headerLabel)