From ef56ed6cb3832a44bd0e5f71ab51db6549682474 Mon Sep 17 00:00:00 2001 From: "Pfeil, Scott Robert" Date: Fri, 18 Dec 2020 12:46:46 -0500 Subject: [PATCH 01/14] Margin and max header width --- .../Atomic/Molecules/HeadersAndFooters/Header.swift | 6 ++++++ .../HeadersAndFooters/MoleculeHeaderView.swift | 10 ++++++++++ MVMCoreUI/Styles/MFStyler.m | 8 ++++++-- MVMCoreUI/Styles/Padding.swift | 10 +++++++--- MVMCoreUI/Utility/Sizing/MFSizeObject.h | 1 + MVMCoreUI/Utility/Sizing/MFSizeObject.m | 2 ++ 6 files changed, 32 insertions(+), 5 deletions(-) diff --git a/MVMCoreUI/Atomic/Molecules/HeadersAndFooters/Header.swift b/MVMCoreUI/Atomic/Molecules/HeadersAndFooters/Header.swift index 63a13fbc..6c8e2c55 100644 --- a/MVMCoreUI/Atomic/Molecules/HeadersAndFooters/Header.swift +++ b/MVMCoreUI/Atomic/Molecules/HeadersAndFooters/Header.swift @@ -23,6 +23,12 @@ open class HeaderView: Container { addSubview(molecule) containerHelper.constrainView(molecule) self.molecule = molecule + guard let margins = molecule.superview?.layoutMarginsGuide else { return } + containerHelper.rightConstraint?.isActive = false + containerHelper.rightConstraint = margins.rightAnchor.constraint(equalTo: molecule.rightAnchor) + containerHelper.rightConstraint?.priority = .defaultHigh + containerHelper.rightConstraint?.isActive = true + molecule.widthAnchor.constraint(equalToConstant: 596).isActive = true } // MARK: - MVMCoreViewProtocol diff --git a/MVMCoreUI/Atomic/Molecules/HeadersAndFooters/MoleculeHeaderView.swift b/MVMCoreUI/Atomic/Molecules/HeadersAndFooters/MoleculeHeaderView.swift index 291540af..2d4f84ff 100644 --- a/MVMCoreUI/Atomic/Molecules/HeadersAndFooters/MoleculeHeaderView.swift +++ b/MVMCoreUI/Atomic/Molecules/HeadersAndFooters/MoleculeHeaderView.swift @@ -24,6 +24,16 @@ public class MoleculeHeaderView: MoleculeContainer { // MARK: - MVMCoreViewProtocol //-------------------------------------------------- + public override func addMolecule(_ molecule: UIView) { + super.addMolecule(molecule) + guard let margins = molecule.superview?.layoutMarginsGuide else { return } + containerHelper.rightConstraint?.isActive = false + containerHelper.rightConstraint = margins.rightAnchor.constraint(equalTo: molecule.rightAnchor) + containerHelper.rightConstraint?.priority = .defaultHigh + containerHelper.rightConstraint?.isActive = true + molecule.widthAnchor.constraint(lessThanOrEqualToConstant: 596).isActive = true + } + open override func updateView(_ size: CGFloat) { super.updateView(size) line.updateView(size) diff --git a/MVMCoreUI/Styles/MFStyler.m b/MVMCoreUI/Styles/MFStyler.m index e8d58a26..e1ffe314 100644 --- a/MVMCoreUI/Styles/MFStyler.m +++ b/MVMCoreUI/Styles/MFStyler.m @@ -77,7 +77,9 @@ CGFloat const LabelWithInternalButtonLineSpace = 2; #pragma mark - Spacing Defaults + (CGFloat)defaultHorizontalPaddingForApplicationWidth { - return [[MFSizeObject sizeObjectWithScalingStandardSize:PaddingDefaultHorizontalSpacing] getValueBasedOnApplicationWidth]; + MFSizeObject *sizeObject = [MFSizeObject sizeObjectWithStandardSize:16]; + [sizeObject addLargerThanCustomSize:32 forThreshold:MFSizeMostlySweetSpotThreshold]; + return [sizeObject getValueBasedOnApplicationWidth]; } + (CGFloat)defaultVerticalPaddingForApplicationWidth { @@ -85,7 +87,9 @@ CGFloat const LabelWithInternalButtonLineSpace = 2; } + (CGFloat)defaultHorizontalPaddingForSize:(CGFloat)size { - return [[MFSizeObject sizeObjectWithScalingStandardSize:PaddingDefaultHorizontalSpacing] getValueBasedOnSize:size]; + MFSizeObject *sizeObject = [MFSizeObject sizeObjectWithStandardSize:16]; + [sizeObject addLargerThanCustomSize:32 forThreshold:MFSizeMostlySweetSpotThreshold]; + return [sizeObject getValueBasedOnSize:size]; } + (CGFloat)defaultVerticalPaddingForSize:(CGFloat)size { diff --git a/MVMCoreUI/Styles/Padding.swift b/MVMCoreUI/Styles/Padding.swift index 0dd9ff6e..bc29882e 100644 --- a/MVMCoreUI/Styles/Padding.swift +++ b/MVMCoreUI/Styles/Padding.swift @@ -25,12 +25,14 @@ public struct Padding { public struct Component { public static let Standard: CGFloat = 24 - public static let HorizontalMarginSpacing: CGFloat = 32 + public static let HorizontalMarginSpacing: CGFloat = 16 public static let LargeVerticalMarginSpacing: CGFloat = 32 public static let VerticalMarginSpacing: CGFloat = 24 public static var horizontalPaddingForApplicationWidth: CGFloat { - return MFSizeObject(scalingStandardSize: HorizontalMarginSpacing)?.getValueBasedOnApplicationWidth() ?? HorizontalMarginSpacing + let sizeObject = MFSizeObject(standardSize: 16)! + sizeObject.addLargerThanCustomSize(32, forThreshold: MFSizeMostlySweetSpotThreshold) + return sizeObject.getValueBasedOnApplicationWidth() } public static var verticalPaddingForApplicationWidth: CGFloat { @@ -38,7 +40,9 @@ public struct Padding { } public static func horizontalPaddingForSize(_ size: CGFloat) -> CGFloat { - return MFSizeObject(scalingStandardSize: HorizontalMarginSpacing)?.getValueBased(onSize: size) ?? HorizontalMarginSpacing + let sizeObject = MFSizeObject(standardSize: 16)! + sizeObject.addLargerThanCustomSize(32, forThreshold: MFSizeMostlySweetSpotThreshold) + return sizeObject.getValueBased(onSize: size) } public static func verticalPaddingForSize(_ size: CGFloat) -> CGFloat { diff --git a/MVMCoreUI/Utility/Sizing/MFSizeObject.h b/MVMCoreUI/Utility/Sizing/MFSizeObject.h index 781feb4c..5c40dafe 100644 --- a/MVMCoreUI/Utility/Sizing/MFSizeObject.h +++ b/MVMCoreUI/Utility/Sizing/MFSizeObject.h @@ -17,6 +17,7 @@ extern CGFloat const MFSizeLargeiPhoneThreshold; extern CGFloat const MFSizeStandardiPadPortraitThreshold; extern CGFloat const MFSizeStandardiPadLandscapeThreshold; extern CGFloat const MFSizeiPadProLandscapeThreshold; +extern CGFloat const MFSizeMostlySweetSpotThreshold; @interface MFSizeObject : NSObject diff --git a/MVMCoreUI/Utility/Sizing/MFSizeObject.m b/MVMCoreUI/Utility/Sizing/MFSizeObject.m index 792e2d81..3379a1ce 100644 --- a/MVMCoreUI/Utility/Sizing/MFSizeObject.m +++ b/MVMCoreUI/Utility/Sizing/MFSizeObject.m @@ -18,6 +18,8 @@ CGFloat const MFSizeLargeiPhoneThreshold = 400; CGFloat const MFSizeStandardiPadPortraitThreshold = 600; CGFloat const MFSizeStandardiPadLandscapeThreshold = 1000; CGFloat const MFSizeiPadProLandscapeThreshold = 1300; +CGFloat const MFSizeMostlySweetSpotThreshold = 750; + @interface MFSizeObject () From ba6f52e18242c17b88469b66afcbd42a1351d0a0 Mon Sep 17 00:00:00 2001 From: "Pfeil, Scott Robert" Date: Thu, 25 Mar 2021 10:53:08 -0400 Subject: [PATCH 02/14] update padding between primary buttons --- .../Molecules/HorizontalCombinationViews/TwoButtonView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/TwoButtonView.swift b/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/TwoButtonView.swift index 00b63ae4..13fcb279 100644 --- a/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/TwoButtonView.swift +++ b/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/TwoButtonView.swift @@ -51,7 +51,7 @@ import UIKit stack.addArrangedSubview(primaryButton) NSLayoutConstraint.constraintPinSubview(toSuperview: stack) stack.axis = .horizontal - stack.spacing = 10 + stack.spacing = 12 equalWidthConstraint = secondaryButton.widthAnchor.constraint(equalTo: primaryButton.widthAnchor, multiplier: 1) equalWidthConstraint?.isActive = true } From 9cde90fdf408dd78823a9e46d675862a81ada9f4 Mon Sep 17 00:00:00 2001 From: "Pfeil, Scott Robert" Date: Thu, 25 Mar 2021 13:44:21 -0400 Subject: [PATCH 03/14] Gutter and margin fixes --- MVMCoreUI.xcodeproj/project.pbxproj | 4 +++ .../RadioButtonLabel.swift | 2 +- .../HorizontalCombinationViews/Tabs.swift | 10 +++--- .../TwoButtonView.swift | 2 +- MVMCoreUI/Atomic/Organisms/StackModel.swift | 10 +++--- .../NSLayoutConstraintExtension.swift | 2 +- .../Styles/MFStyler+PaddingExtension.swift | 36 +++++++++++++++++++ MVMCoreUI/Styles/MFStyler.m | 28 ++++++--------- MVMCoreUI/Styles/Padding.swift | 27 +++++++++----- 9 files changed, 84 insertions(+), 37 deletions(-) create mode 100644 MVMCoreUI/Styles/MFStyler+PaddingExtension.swift diff --git a/MVMCoreUI.xcodeproj/project.pbxproj b/MVMCoreUI.xcodeproj/project.pbxproj index 9ba02cb8..fb0a0e32 100644 --- a/MVMCoreUI.xcodeproj/project.pbxproj +++ b/MVMCoreUI.xcodeproj/project.pbxproj @@ -346,6 +346,7 @@ D236E5B4241FEB1000C38625 /* ListTwoColumnPriceDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = D236E5B2241FEB1000C38625 /* ListTwoColumnPriceDescription.swift */; }; D236E5B5241FEB1000C38625 /* ListTwoColumnPriceDescriptionModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D236E5B3241FEB1000C38625 /* ListTwoColumnPriceDescriptionModel.swift */; }; D236E5B7242007C500C38625 /* MVMControllerModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = D236E5B6242007C500C38625 /* MVMControllerModelProtocol.swift */; }; + D23A8FD9260CE004007E14CE /* MFStyler+PaddingExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = D23A8FD5260CDF01007E14CE /* MFStyler+PaddingExtension.swift */; }; D23EA7FB2475F09800D60C34 /* CarouselItemProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = D23EA7FA2475F09800D60C34 /* CarouselItemProtocol.swift */; }; D23EA7FE247EBBB700D60C34 /* NavigationLabelButtonModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D23EA7FD247EBBB700D60C34 /* NavigationLabelButtonModel.swift */; }; D23EA800247EBD6C00D60C34 /* LabelBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D23EA7FF247EBD6C00D60C34 /* LabelBarButtonItem.swift */; }; @@ -902,6 +903,7 @@ D236E5B2241FEB1000C38625 /* ListTwoColumnPriceDescription.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListTwoColumnPriceDescription.swift; sourceTree = ""; }; D236E5B3241FEB1000C38625 /* ListTwoColumnPriceDescriptionModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListTwoColumnPriceDescriptionModel.swift; sourceTree = ""; }; D236E5B6242007C500C38625 /* MVMControllerModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MVMControllerModelProtocol.swift; sourceTree = ""; }; + D23A8FD5260CDF01007E14CE /* MFStyler+PaddingExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MFStyler+PaddingExtension.swift"; sourceTree = ""; }; D23EA7FA2475F09800D60C34 /* CarouselItemProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CarouselItemProtocol.swift; sourceTree = ""; }; D23EA7FD247EBBB700D60C34 /* NavigationLabelButtonModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationLabelButtonModel.swift; sourceTree = ""; }; D23EA7FF247EBD6C00D60C34 /* LabelBarButtonItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabelBarButtonItem.swift; sourceTree = ""; }; @@ -2000,6 +2002,7 @@ D29DF13921E68637003B2FB9 /* MFStyler.m */, 0A6682A92435125F00AD3CA1 /* Styler.swift */, 0A6682AB243531C300AD3CA1 /* Padding.swift */, + D23A8FD5260CDF01007E14CE /* MFStyler+PaddingExtension.swift */, ); path = Styles; sourceTree = ""; @@ -2843,6 +2846,7 @@ D253BB9C245874F8002DE544 /* BGImageMolecule.swift in Sources */, D2C78CD224228BBD00B69FDE /* ActionOpenPanelModel.swift in Sources */, AA617AB02453010A00910B8F /* ListDeviceComplexLinkSmall.swift in Sources */, + D23A8FD9260CE004007E14CE /* MFStyler+PaddingExtension.swift in Sources */, C695A68123C9830D00BFB94E /* NumberedListModel.swift in Sources */, 01EB3684236097C0006832FA /* MoleculeModelProtocol.swift in Sources */, D27CD4102339057800C1DC07 /* EyebrowHeadlineBodyLink.swift in Sources */, diff --git a/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/RadioButtonLabel.swift b/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/RadioButtonLabel.swift index 918871e7..eb7266a9 100644 --- a/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/RadioButtonLabel.swift +++ b/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/RadioButtonLabel.swift @@ -32,7 +32,7 @@ import UIKit if let rightView = createRightView() { addSubview(rightView) - rightView.leftAnchor.constraint(equalTo: radioButton.rightAnchor, constant: PaddingHorizontalBetweenRelatedItems).isActive = true + rightView.leftAnchor.constraint(equalTo: radioButton.rightAnchor, constant: Padding.Component.gutterForApplicationWidth).isActive = true rightView.rightAnchor.constraint(equalTo: layoutMarginsGuide.rightAnchor, constant: 0).isActive = true var constraint = rightView.topAnchor.constraint(greaterThanOrEqualTo: layoutMarginsGuide.topAnchor, constant: PaddingOne) diff --git a/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/Tabs.swift b/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/Tabs.swift index 1ddd9412..b9225488 100644 --- a/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/Tabs.swift +++ b/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/Tabs.swift @@ -44,7 +44,7 @@ import UIKit //constant let TabCellId = "TabCell" - public let sectionPadding: CGFloat = 20.0 + public let sectionPadding: CGFloat = Padding.Component.gutterForApplicationWidth public let cellSpacing: CGFloat = 34.0 public let cellHeight: CGFloat = 27.0 public let selectionLineHeight: CGFloat = 4.0 @@ -198,11 +198,13 @@ extension Tabs: UICollectionViewDelegateFlowLayout { } public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets { - if !paddingBeforeFirstTab && section == 0 { - return .zero - } else { + guard section == 0 else { return UIEdgeInsets(top: 0, left: sectionPadding, bottom: 0, right: 0) } + guard paddingBeforeFirstTab else { + return .zero + } + return UIEdgeInsets(top: 0, left: Padding.Component.horizontalPaddingForApplicationWidth, bottom: 0, right: 0) } public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { diff --git a/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/TwoButtonView.swift b/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/TwoButtonView.swift index 13fcb279..5f846730 100644 --- a/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/TwoButtonView.swift +++ b/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/TwoButtonView.swift @@ -51,7 +51,7 @@ import UIKit stack.addArrangedSubview(primaryButton) NSLayoutConstraint.constraintPinSubview(toSuperview: stack) stack.axis = .horizontal - stack.spacing = 12 + stack.spacing = Padding.Component.gutterForApplicationWidth equalWidthConstraint = secondaryButton.widthAnchor.constraint(equalTo: primaryButton.widthAnchor, multiplier: 1) equalWidthConstraint?.isActive = true } diff --git a/MVMCoreUI/Atomic/Organisms/StackModel.swift b/MVMCoreUI/Atomic/Organisms/StackModel.swift index d96da035..dae6fad8 100644 --- a/MVMCoreUI/Atomic/Organisms/StackModel.swift +++ b/MVMCoreUI/Atomic/Organisms/StackModel.swift @@ -11,9 +11,7 @@ //-------------------------------------------------- // MARK: - Properties //-------------------------------------------------- - - static let defaultSpacing: CGFloat = 16.0 - + public class var identifier: String { return "stack" } @@ -21,7 +19,7 @@ public var backgroundColor: Color? public var molecules: [StackItemModelProtocol & MoleculeModelProtocol] public var axis: NSLayoutConstraint.Axis = .vertical - public var spacing: CGFloat = StackModel.defaultSpacing + public var spacing: CGFloat = Padding.Four public var useStackSpacingBeforeFirstItem = false //-------------------------------------------------- @@ -35,6 +33,8 @@ } if let spacing = spacing { self.spacing = spacing + } else if axis == .horizontal { + self.spacing = Padding.Component.gutterForApplicationWidth } super.init() } @@ -63,6 +63,8 @@ } if let spacing = try typeContainer.decodeIfPresent(CGFloat.self, forKey: .spacing) { self.spacing = spacing + } else if axis == .horizontal { + self.spacing = Padding.Component.gutterForApplicationWidth } backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor) try super.init(from: decoder) diff --git a/MVMCoreUI/Categories/NSLayoutConstraintExtension.swift b/MVMCoreUI/Categories/NSLayoutConstraintExtension.swift index 242e3fc0..43928769 100644 --- a/MVMCoreUI/Categories/NSLayoutConstraintExtension.swift +++ b/MVMCoreUI/Categories/NSLayoutConstraintExtension.swift @@ -55,6 +55,6 @@ public extension NSLayoutConstraint { } leftView.leadingAnchor.constraint(equalTo: superView.layoutMarginsGuide.leadingAnchor).isActive = true superView.layoutMarginsGuide.trailingAnchor.constraint(equalTo: rightView.trailingAnchor).isActive = true - rightView.leftAnchor.constraint(greaterThanOrEqualTo: leftView.rightAnchor, constant: PaddingHorizontalBetweenRelatedItems).isActive = true + rightView.leftAnchor.constraint(greaterThanOrEqualTo: leftView.rightAnchor, constant: Padding.Component.gutterForApplicationWidth).isActive = true } } diff --git a/MVMCoreUI/Styles/MFStyler+PaddingExtension.swift b/MVMCoreUI/Styles/MFStyler+PaddingExtension.swift new file mode 100644 index 00000000..d4bf8ebf --- /dev/null +++ b/MVMCoreUI/Styles/MFStyler+PaddingExtension.swift @@ -0,0 +1,36 @@ +// +// MFStyler+PaddingExtension.swift +// MVMCoreUI +// +// Created by Scott Pfeil on 3/25/21. +// Copyright © 2021 Verizon Wireless. All rights reserved. +// + +import Foundation + +@objc public extension MFStyler { + + @objc static func bridgeGetGutterSizeForForApplicationWidth() -> CGFloat { + Padding.Component.gutterForApplicationWidth + } + + @objc static func bridgeGetGutterSize(for size: CGFloat) -> CGFloat { + Padding.Component.gutterFor(size: size) + } + + @objc static func bridgeHorizontalPaddingFor(size: CGFloat) -> CGFloat { + Padding.Component.horizontalPaddingForSize(size) + } + + @objc static func bridgeVerticalPaddingFor(size: CGFloat) -> CGFloat { + Padding.Component.verticalPaddingForSize(size) + } + + @objc static func bridgeSetDefaultMarginsFor(view: UIView, size: CGFloat, horizontal: Bool = true, vertical: Bool = false) { + Styler.setDefaultMarginsFor(view, size: size, horizontal: horizontal, vertical: vertical) + } + + @objc static func bridgeSetMarginsFor(view: UIView, size: CGFloat, horizontal: CGFloat, top: CGFloat, bottom: CGFloat) { + Styler.setMarginsFor(view, size: size, horizontal: horizontal, top: top, bottom: bottom) + } +} diff --git a/MVMCoreUI/Styles/MFStyler.m b/MVMCoreUI/Styles/MFStyler.m index e1ffe314..17b3e7f1 100644 --- a/MVMCoreUI/Styles/MFStyler.m +++ b/MVMCoreUI/Styles/MFStyler.m @@ -14,6 +14,7 @@ #import "MVMCoreUISplitViewController.h" @import MVMCore.MVMCoreDispatchUtility; #import +#import CGFloat const PaddingDefault = 24; CGFloat const PaddingDefaultHorizontalSpacing = 32; @@ -26,7 +27,7 @@ CGFloat const PaddingVerticalWhiteGrayView = 72; CGFloat const PaddingVerticalHeadlineAlternate = 48; CGFloat const PaddingPrimaryButtonTop = 36; -CGFloat const PaddingHorizontalBetweenRelatedItems = 16; +CGFloat const PaddingHorizontalBetweenRelatedItems = 12; CGFloat const PaddingOne = 6; CGFloat const PaddingTwo = 12; CGFloat const PaddingThree = 18; @@ -77,23 +78,19 @@ CGFloat const LabelWithInternalButtonLineSpace = 2; #pragma mark - Spacing Defaults + (CGFloat)defaultHorizontalPaddingForApplicationWidth { - MFSizeObject *sizeObject = [MFSizeObject sizeObjectWithStandardSize:16]; - [sizeObject addLargerThanCustomSize:32 forThreshold:MFSizeMostlySweetSpotThreshold]; - return [sizeObject getValueBasedOnApplicationWidth]; + return [self bridgeHorizontalPaddingForSize:[MVMCoreUISplitViewController getApplicationViewWidth]]; } + (CGFloat)defaultVerticalPaddingForApplicationWidth { - return [[MFSizeObject sizeObjectWithScalingStandardSize:PaddingDefaultVerticalSpacing] getValueBasedOnApplicationWidth]; + return [self bridgeVerticalPaddingForSize:[MVMCoreUISplitViewController getApplicationViewWidth]]; } + (CGFloat)defaultHorizontalPaddingForSize:(CGFloat)size { - MFSizeObject *sizeObject = [MFSizeObject sizeObjectWithStandardSize:16]; - [sizeObject addLargerThanCustomSize:32 forThreshold:MFSizeMostlySweetSpotThreshold]; - return [sizeObject getValueBasedOnSize:size]; + return [self bridgeHorizontalPaddingForSize:size]; } + (CGFloat)defaultVerticalPaddingForSize:(CGFloat)size { - return [[MFSizeObject sizeObjectWithScalingStandardSize:PaddingDefaultVerticalSpacing] getValueBasedOnSize:size]; + return [self bridgeVerticalPaddingForSize:size]; } + (void)setDefaultMarginsForView:(nullable UIView *)view size:(CGFloat)size { @@ -101,18 +98,13 @@ CGFloat const LabelWithInternalButtonLineSpace = 2; } + (void)setDefaultMarginsForView:(nullable UIView *)view size:(CGFloat)size horizontal:(BOOL)horizontal vertical:(BOOL)vertical { - CGFloat horizontalPadding = horizontal ? [MFStyler defaultHorizontalPaddingForSize:size] : 0; - CGFloat verticalPadding = vertical ? PaddingDefaultVerticalSpacing3 : 0; - [MVMCoreDispatchUtility performBlockOnMainThread:^{ - [MVMCoreUIUtility setMarginsForView:view leading:horizontalPadding top:verticalPadding trailing:horizontalPadding bottom:verticalPadding]; - }]; + if (!view) { return; } + [self bridgeSetDefaultMarginsForView:view size:size horizontal:horizontal vertical:vertical]; } + (void)setMarginsForView:(nullable UIView *)view size:(CGFloat)size defaultHorizontal:(BOOL)horizontal top:(CGFloat)top bottom:(CGFloat)bottom { - CGFloat horizontalPadding = horizontal ? [MFStyler defaultHorizontalPaddingForSize:size] : 0; - [MVMCoreDispatchUtility performBlockOnMainThread:^{ - [MVMCoreUIUtility setMarginsForView:view leading:horizontalPadding top:top trailing:horizontalPadding bottom:bottom]; - }]; + if (!view) { return; } + [self bridgeSetMarginsForView:view size:size horizontal:horizontal top:top bottom:bottom]; } #pragma mark - 3.0 fonts diff --git a/MVMCoreUI/Styles/Padding.swift b/MVMCoreUI/Styles/Padding.swift index 83afe777..2b158739 100644 --- a/MVMCoreUI/Styles/Padding.swift +++ b/MVMCoreUI/Styles/Padding.swift @@ -24,27 +24,38 @@ public struct Padding { public struct Component { public static let Standard: CGFloat = 24 public static let HorizontalMarginSpacing: CGFloat = 16 - public static let LargeVerticalMarginSpacing: CGFloat = 32 + public static let LargeMarginSpacingLarge: CGFloat = 32 public static let VerticalMarginSpacing: CGFloat = 24 - + public static let LargeVerticalMarginSpacing: CGFloat = 32 + public static let HorizontalGutterSpacing: CGFloat = 12 + public static let LargeHorizontalGutterSpacing: CGFloat = 24 + public static var horizontalPaddingForApplicationWidth: CGFloat { - let sizeObject = MFSizeObject(standardSize: 16)! - sizeObject.addLargerThanCustomSize(32, forThreshold: MFSizeMostlySweetSpotThreshold) - return sizeObject.getValueBasedOnApplicationWidth() + horizontalPaddingForSize(MVMCoreUISplitViewController.getApplicationViewWidth()) } public static var verticalPaddingForApplicationWidth: CGFloat { - MFSizeObject(scalingStandardSize: VerticalMarginSpacing)?.getValueBasedOnApplicationWidth() ?? VerticalMarginSpacing + verticalPaddingForSize(MVMCoreUISplitViewController.getApplicationViewWidth()) + } + + public static var gutterForApplicationWidth: CGFloat { + gutterFor(size: MVMCoreUISplitViewController.getApplicationViewWidth()) } public static func horizontalPaddingForSize(_ size: CGFloat) -> CGFloat { - let sizeObject = MFSizeObject(standardSize: 16)! - sizeObject.addLargerThanCustomSize(32, forThreshold: MFSizeMostlySweetSpotThreshold) + let sizeObject = MFSizeObject(standardSize: HorizontalMarginSpacing)! + sizeObject.addLargerThanCustomSize(LargeMarginSpacingLarge, forThreshold: MFSizeMostlySweetSpotThreshold) return sizeObject.getValueBased(onSize: size) } public static func verticalPaddingForSize(_ size: CGFloat) -> CGFloat { MFSizeObject(scalingStandardSize: VerticalMarginSpacing)?.getValueBased(onSize: size) ?? VerticalMarginSpacing } + + public static func gutterFor(size: CGFloat) -> CGFloat { + let sizeObject = MFSizeObject(standardSize: HorizontalGutterSpacing)! + sizeObject.addLargerThanCustomSize(LargeHorizontalGutterSpacing, forThreshold: MFSizeMostlySweetSpotThreshold) + return sizeObject.getValueBased(onSize: size) + } } } From 9c8df31662f64390c19a8e91cdb7ea9da7e39a7a Mon Sep 17 00:00:00 2001 From: "Pfeil, Scott Robert" Date: Thu, 25 Mar 2021 14:00:05 -0400 Subject: [PATCH 04/14] Undo tabs and links changes --- .../Atomic/Molecules/HorizontalCombinationViews/Tabs.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/Tabs.swift b/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/Tabs.swift index b9225488..f3ce24e5 100644 --- a/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/Tabs.swift +++ b/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/Tabs.swift @@ -44,7 +44,7 @@ import UIKit //constant let TabCellId = "TabCell" - public let sectionPadding: CGFloat = Padding.Component.gutterForApplicationWidth + public let sectionPadding: CGFloat = 20.0 public let cellSpacing: CGFloat = 34.0 public let cellHeight: CGFloat = 27.0 public let selectionLineHeight: CGFloat = 4.0 From dfdeecfd38c7e85f67da585bb40065e2998fb322 Mon Sep 17 00:00:00 2001 From: "Pfeil, Scott Robert" Date: Thu, 25 Mar 2021 14:00:23 -0400 Subject: [PATCH 05/14] iPad same margin as iOS --- MVMCoreUI/Styles/Padding.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/MVMCoreUI/Styles/Padding.swift b/MVMCoreUI/Styles/Padding.swift index 2b158739..5c53c39e 100644 --- a/MVMCoreUI/Styles/Padding.swift +++ b/MVMCoreUI/Styles/Padding.swift @@ -44,7 +44,6 @@ public struct Padding { public static func horizontalPaddingForSize(_ size: CGFloat) -> CGFloat { let sizeObject = MFSizeObject(standardSize: HorizontalMarginSpacing)! - sizeObject.addLargerThanCustomSize(LargeMarginSpacingLarge, forThreshold: MFSizeMostlySweetSpotThreshold) return sizeObject.getValueBased(onSize: size) } From c406e9b755e53b20ca6b09e7b46a2e223af9183b Mon Sep 17 00:00:00 2001 From: "Pfeil, Scott Robert" Date: Thu, 25 Mar 2021 14:05:49 -0400 Subject: [PATCH 06/14] typo fix. Remove iPad gutter size --- MVMCoreUI/Styles/Padding.swift | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/MVMCoreUI/Styles/Padding.swift b/MVMCoreUI/Styles/Padding.swift index 5c53c39e..3bf81563 100644 --- a/MVMCoreUI/Styles/Padding.swift +++ b/MVMCoreUI/Styles/Padding.swift @@ -24,7 +24,7 @@ public struct Padding { public struct Component { public static let Standard: CGFloat = 24 public static let HorizontalMarginSpacing: CGFloat = 16 - public static let LargeMarginSpacingLarge: CGFloat = 32 + public static let LargeHorizontalMarginSpacing: CGFloat = 32 public static let VerticalMarginSpacing: CGFloat = 24 public static let LargeVerticalMarginSpacing: CGFloat = 32 public static let HorizontalGutterSpacing: CGFloat = 12 @@ -53,7 +53,6 @@ public struct Padding { public static func gutterFor(size: CGFloat) -> CGFloat { let sizeObject = MFSizeObject(standardSize: HorizontalGutterSpacing)! - sizeObject.addLargerThanCustomSize(LargeHorizontalGutterSpacing, forThreshold: MFSizeMostlySweetSpotThreshold) return sizeObject.getValueBased(onSize: size) } } From b4cfca0cb255c9732cdb097e011a5b9b7bd85aae Mon Sep 17 00:00:00 2001 From: "Pfeil, Scott Robert" Date: Thu, 25 Mar 2021 15:55:31 -0400 Subject: [PATCH 07/14] fix bridge mismatch --- MVMCoreUI/Styles/MFStyler+PaddingExtension.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MVMCoreUI/Styles/MFStyler+PaddingExtension.swift b/MVMCoreUI/Styles/MFStyler+PaddingExtension.swift index d4bf8ebf..a38dd3d7 100644 --- a/MVMCoreUI/Styles/MFStyler+PaddingExtension.swift +++ b/MVMCoreUI/Styles/MFStyler+PaddingExtension.swift @@ -30,7 +30,7 @@ import Foundation Styler.setDefaultMarginsFor(view, size: size, horizontal: horizontal, vertical: vertical) } - @objc static func bridgeSetMarginsFor(view: UIView, size: CGFloat, horizontal: CGFloat, top: CGFloat, bottom: CGFloat) { - Styler.setMarginsFor(view, size: size, horizontal: horizontal, top: top, bottom: bottom) + @objc static func bridgeSetMarginsFor(view: UIView, size: CGFloat, horizontal: Bool, top: CGFloat, bottom: CGFloat) { + Styler.setMarginsFor(view, size: size, horizontal: horizontal ? nil : 0, top: top, bottom: bottom) } } From 9eb28ff675029a566b1149c28397b67a554cebc2 Mon Sep 17 00:00:00 2001 From: "Pfeil, Scott Robert" Date: Tue, 30 Mar 2021 16:36:08 -0400 Subject: [PATCH 08/14] top alert margins --- .../CollapsableNotificationModel.swift | 4 ++-- .../Molecules/TopNotification/Notification.swift | 10 ++-------- .../TopNotification/NotificationModel.swift | 14 ++++++++++---- MVMCoreUI/TopAlert/MVMCoreUITopAlertMainView.m | 10 ++++++---- .../MVMCoreUICommonViewsUtility+Extension.swift | 4 ++-- 5 files changed, 22 insertions(+), 20 deletions(-) diff --git a/MVMCoreUI/Atomic/Molecules/TopNotification/CollapsableNotificationModel.swift b/MVMCoreUI/Atomic/Molecules/TopNotification/CollapsableNotificationModel.swift index 17b1aef7..bdcd3fe1 100644 --- a/MVMCoreUI/Atomic/Molecules/TopNotification/CollapsableNotificationModel.swift +++ b/MVMCoreUI/Atomic/Molecules/TopNotification/CollapsableNotificationModel.swift @@ -24,8 +24,8 @@ open class CollapsableNotificationModel: NotificationModel { super.init(with: headline) } - open override func setDefault() { - super.setDefault() + open override func setDefaults() { + super.setDefaults() if topLabel.textColor == nil { topLabel.textColor = Color(uiColor: .white) } diff --git a/MVMCoreUI/Atomic/Molecules/TopNotification/Notification.swift b/MVMCoreUI/Atomic/Molecules/TopNotification/Notification.swift index 09edbbcc..c17f43e0 100644 --- a/MVMCoreUI/Atomic/Molecules/TopNotification/Notification.swift +++ b/MVMCoreUI/Atomic/Molecules/TopNotification/Notification.swift @@ -8,7 +8,7 @@ import Foundation -@objcMembers open class NotificationView: View { +@objcMembers open class NotificationView: Container { //-------------------------------------------------- // MARK: - Outlets //-------------------------------------------------- @@ -43,19 +43,13 @@ import Foundation labelStack = Stack.createStack(with: [headline, body], spacing: 0) horizontalStack = Stack.createStack(with: [(view: labelStack, model: StackItemModel()),(view: button, model: StackItemModel(horizontalAlignment: .fill)),(view: closeButton, model: StackItemModel(horizontalAlignment: .fill))], axis: .horizontal) - addSubview(horizontalStack) - NSLayoutConstraint.constraintPinSubview(horizontalStack, pinTop: true, topConstant: PaddingTwo, pinBottom: true, bottomConstant: PaddingTwo, pinLeft: true, leftConstant: PaddingThree, pinRight: true, rightConstant: PaddingThree) + addAndContain(horizontalStack) labelStack.restack() horizontalStack.restack() heightAnchor.constraint(equalToConstant: Self.viewHeight).isActive = true } - open override func updateView(_ size: CGFloat) { - super.updateView(size) - horizontalStack.updateView(size) - } - open override func reset() { super.reset() backgroundColor = .mvmGreen() diff --git a/MVMCoreUI/Atomic/Molecules/TopNotification/NotificationModel.swift b/MVMCoreUI/Atomic/Molecules/TopNotification/NotificationModel.swift index 3d02cecd..1e77e61d 100644 --- a/MVMCoreUI/Atomic/Molecules/TopNotification/NotificationModel.swift +++ b/MVMCoreUI/Atomic/Molecules/TopNotification/NotificationModel.swift @@ -7,7 +7,7 @@ // -open class NotificationModel: MoleculeModelProtocol { +open class NotificationModel: ContainerModel, MoleculeModelProtocol { //-------------------------------------------------- // MARK: - Properties //-------------------------------------------------- @@ -26,13 +26,19 @@ open class NotificationModel: MoleculeModelProtocol { public init(with headline: LabelModel) { self.headline = headline + super.init() } //-------------------------------------------------- // MARK: - Default //-------------------------------------------------- - open func setDefault() { + open override func setDefaults() { + useHorizontalMargins = true + useVerticalMargins = true + topPadding = PaddingTwo + bottomPadding = PaddingTwo + if backgroundColor == nil { backgroundColor = Color(uiColor: .mvmGreen) } @@ -76,10 +82,10 @@ open class NotificationModel: MoleculeModelProtocol { body = try typeContainer.decodeIfPresent(LabelModel.self, forKey: .body) button = try typeContainer.decodeIfPresent(ButtonModel.self, forKey: .button) closeButton = try typeContainer.decodeIfPresent(NotificationXButtonModel.self, forKey: .closeButton) - setDefault() + super.init() } - open func encode(to encoder: Encoder) throws { + open override func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) try container.encode(moleculeName, forKey: .moleculeName) try container.encodeIfPresent(backgroundColor, forKey: .backgroundColor) diff --git a/MVMCoreUI/TopAlert/MVMCoreUITopAlertMainView.m b/MVMCoreUI/TopAlert/MVMCoreUITopAlertMainView.m index 44f248f3..fa96630f 100644 --- a/MVMCoreUI/TopAlert/MVMCoreUITopAlertMainView.m +++ b/MVMCoreUI/TopAlert/MVMCoreUITopAlertMainView.m @@ -164,18 +164,19 @@ [self.iconView removeFromSuperview]; } + CGFloat horizontalPadding = [MFStyler defaultHorizontalPaddingForApplicationWidth]; if (imageURL) { LoadImageView *imageView = [[LoadImageView alloc] init]; imageView.translatesAutoresizingMaskIntoConstraints = NO; [imageView setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh forAxis:UILayoutConstraintAxisHorizontal]; [self addSubview:imageView]; [NSLayoutConstraint activateConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|->=space-[imageView]->=space-|" options:NSLayoutFormatDirectionLeadingToTrailing metrics:@{@"space":@(PaddingFive)} views:NSDictionaryOfVariableBindings(imageView)]]; - [NSLayoutConstraint activateConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-space-[imageView]-space-[centerView]" options:NSLayoutFormatDirectionLeadingToTrailing metrics:@{@"space":@(PaddingThree)} views:NSDictionaryOfVariableBindings(imageView,centerView)]]; + [NSLayoutConstraint activateConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-space-[imageView]-space-[centerView]" options:NSLayoutFormatDirectionLeadingToTrailing metrics:@{@"space":@(horizontalPadding)} views:NSDictionaryOfVariableBindings(imageView,centerView)]]; [NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0].active = YES; self.iconView = imageView; [imageView loadImageWithName:imageURL width:@(32)]; } else { - [NSLayoutConstraint constraintWithItem:centerView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeft multiplier:1 constant:PaddingThree].active = YES; + [NSLayoutConstraint constraintWithItem:centerView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeft multiplier:1 constant:horizontalPadding].active = YES; } } @@ -193,6 +194,7 @@ - (void)setupWithButton:(BOOL)showButton { // Setup the button. + CGFloat horizontalPadding = [MFStyler defaultHorizontalPaddingForApplicationWidth]; if (showButton) { if (!self.button) { @@ -210,7 +212,7 @@ [self addSubview:button]; [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0].active = YES; [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.centerView attribute:NSLayoutAttributeRight multiplier:1 constant:PaddingThree].active = YES; - [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:button attribute:NSLayoutAttributeRight multiplier:1 constant:(self.closeButton ? PaddingTen : PaddingFive)].active = YES; + [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:button attribute:NSLayoutAttributeRight multiplier:1 constant:(self.closeButton ? PaddingTen : horizontalPadding)].active = YES; self.button = button; } } else { @@ -222,7 +224,7 @@ } if (!self.labelRightConstraint) { - self.labelRightConstraint = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.centerView attribute:NSLayoutAttributeRight multiplier:1 constant:(self.closeButton ? PaddingTen : PaddingFive)]; + self.labelRightConstraint = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.centerView attribute:NSLayoutAttributeRight multiplier:1 constant:(self.closeButton ? PaddingTen : horizontalPadding)]; } self.labelRightConstraint.active = YES; } diff --git a/MVMCoreUI/Utility/MVMCoreUICommonViewsUtility+Extension.swift b/MVMCoreUI/Utility/MVMCoreUICommonViewsUtility+Extension.swift index d1173250..60e57d75 100644 --- a/MVMCoreUI/Utility/MVMCoreUICommonViewsUtility+Extension.swift +++ b/MVMCoreUI/Utility/MVMCoreUICommonViewsUtility+Extension.swift @@ -23,11 +23,11 @@ public extension MVMCoreUICommonViewsUtility { view.addSubview(button) var constraints: [NSLayoutConstraint] = [] if centeredVertically { - constraints.append(view.rightAnchor.constraint(equalTo: button.rightAnchor, constant: PaddingTwo)) + constraints.append(view.rightAnchor.constraint(equalTo: button.rightAnchor, constant: Padding.Component.horizontalPaddingForApplicationWidth)) constraints.append(view.centerYAnchor.constraint(equalTo: button.centerYAnchor)) } else { constraints.append(button.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: PaddingOne)) - constraints.append(view.safeAreaLayoutGuide.rightAnchor.constraint(equalTo: button.rightAnchor, constant: PaddingTwo)) + constraints.append(view.safeAreaLayoutGuide.rightAnchor.constraint(equalTo: button.rightAnchor, constant: Padding.Component.horizontalPaddingForApplicationWidth)) } NSLayoutConstraint.activate(constraints) return button From 758ccff930f7c1a6b93d5dda848a8159bde0cef8 Mon Sep 17 00:00:00 2001 From: "Pfeil, Scott Robert" Date: Mon, 5 Apr 2021 10:57:04 -0400 Subject: [PATCH 09/14] loading spinner bounds fix --- MVMCoreUI/BaseControllers/MFLoadingViewController.m | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/MVMCoreUI/BaseControllers/MFLoadingViewController.m b/MVMCoreUI/BaseControllers/MFLoadingViewController.m index aad2383e..56ad6d3b 100644 --- a/MVMCoreUI/BaseControllers/MFLoadingViewController.m +++ b/MVMCoreUI/BaseControllers/MFLoadingViewController.m @@ -34,8 +34,7 @@ [view addSubview:activityIndicatorView]; self.activityIndicator = activityIndicatorView; self.activityIndicator.accessibilityIdentifier = @"Loader"; - - [NSLayoutConstraint constraintPinView:activityIndicatorView heightConstraint:YES heightConstant:PaddingSix widthConstraint:YES widthConstant:PaddingSix]; + [activityIndicatorView pinWidthAndHeight]; // Sets the constraints for the activityIndicatorView [NSLayoutConstraint constraintPinSubview:activityIndicatorView pinCenterX:YES pinCenterY:YES]; From f29878e1748f274d980f7dbdb28d3811fb335f27 Mon Sep 17 00:00:00 2001 From: "Pfeil, Scott Robert" Date: Tue, 6 Apr 2021 16:54:36 -0400 Subject: [PATCH 10/14] button width to column changes --- MVMCoreUI/Atomic/Atoms/Buttons/PillButton.swift | 12 ++++++++---- MVMCoreUI/Styles/MFStyler+PaddingExtension.swift | 8 ++++++++ MVMCoreUI/Styles/Padding.swift | 4 ++++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/MVMCoreUI/Atomic/Atoms/Buttons/PillButton.swift b/MVMCoreUI/Atomic/Atoms/Buttons/PillButton.swift index 8eefe1d7..1bdf0234 100644 --- a/MVMCoreUI/Atomic/Atoms/Buttons/PillButton.swift +++ b/MVMCoreUI/Atomic/Atoms/Buttons/PillButton.swift @@ -168,10 +168,14 @@ open class PillButton: Button, MVMCoreUIViewConstrainingProtocol { } open override var intrinsicContentSize: CGSize { - - let size = super.intrinsicContentSize - let width = size.width + (2 * getInnerPadding()) - return CGSize(width: max(width, getMinimumWidth()), height: getHeight()) + if buttonSize == .tiny { + let size = super.intrinsicContentSize + let width = size.width + (2 * getInnerPadding()) + return CGSize(width: max(width, getMinimumWidth()), height: getHeight()) + } else { + let width = Padding.Component.gutterForApplicationWidth + (2.0 * Padding.Component.columnFor(size: MVMCoreUISplitViewController.getApplicationViewWidth())) + return CGSize(width: min(292, width), height: getHeight()) + } } //-------------------------------------------------- diff --git a/MVMCoreUI/Styles/MFStyler+PaddingExtension.swift b/MVMCoreUI/Styles/MFStyler+PaddingExtension.swift index a38dd3d7..37fa4a9f 100644 --- a/MVMCoreUI/Styles/MFStyler+PaddingExtension.swift +++ b/MVMCoreUI/Styles/MFStyler+PaddingExtension.swift @@ -18,6 +18,14 @@ import Foundation Padding.Component.gutterFor(size: size) } + @objc static func bridgeGetColumnSizeForForApplicationWidth() -> CGFloat { + Padding.Component.columnFor(size: MVMCoreUISplitViewController.getApplicationViewWidth()) + } + + @objc static func bridgeGetColumnSize(for size: CGFloat) -> CGFloat { + Padding.Component.columnFor(size: size) + } + @objc static func bridgeHorizontalPaddingFor(size: CGFloat) -> CGFloat { Padding.Component.horizontalPaddingForSize(size) } diff --git a/MVMCoreUI/Styles/Padding.swift b/MVMCoreUI/Styles/Padding.swift index 3bf81563..f7e5b407 100644 --- a/MVMCoreUI/Styles/Padding.swift +++ b/MVMCoreUI/Styles/Padding.swift @@ -55,5 +55,9 @@ public struct Padding { let sizeObject = MFSizeObject(standardSize: HorizontalGutterSpacing)! return sizeObject.getValueBased(onSize: size) } + + public static func columnFor(size: CGFloat) -> CGFloat { + return (size - (3.0 * gutterFor(size: size)) - (2.0 * horizontalPaddingForSize(size))) / 4.0 + } } } From dfa40752ea59ee78cf22e6134f56155ffeddfd0f Mon Sep 17 00:00:00 2001 From: "Pfeil, Scott Robert" Date: Wed, 7 Apr 2021 11:14:10 -0400 Subject: [PATCH 11/14] radio box gutter --- MVMCoreUI/Atomic/Atoms/Selectors/RadioBoxes.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/MVMCoreUI/Atomic/Atoms/Selectors/RadioBoxes.swift b/MVMCoreUI/Atomic/Atoms/Selectors/RadioBoxes.swift index 4a596a35..e8f940a2 100644 --- a/MVMCoreUI/Atomic/Atoms/Selectors/RadioBoxes.swift +++ b/MVMCoreUI/Atomic/Atoms/Selectors/RadioBoxes.swift @@ -14,7 +14,7 @@ open class RadioBoxes: View { public var collectionViewHeight: NSLayoutConstraint! private let boxWidth: CGFloat = 151.0 private let boxHeight: CGFloat = 64.0 - private let itemSpacing: CGFloat = 8.0 + private var itemSpacing: CGFloat = 12.0 private var numberOfColumns: CGFloat = 2.0 private var radioBoxesModel: RadioBoxesModel? { return model as? RadioBoxesModel @@ -71,6 +71,7 @@ open class RadioBoxes: View { @objc override open func updateView(_ size: CGFloat) { super.updateView(size) self.size = size + itemSpacing = Padding.Component.gutterFor(size: size) collectionView.updateView(size) } From 45afb5525882fb0ac3a9af41b7c2186d33d5b1d1 Mon Sep 17 00:00:00 2001 From: "Pfeil, Scott Robert" Date: Wed, 7 Apr 2021 11:38:23 -0400 Subject: [PATCH 12/14] two column margin --- .../List/TwoColumn/ListTwoColumnCompareChanges.swift | 3 +-- .../List/TwoColumn/ListTwoColumnDropdownSelectors.swift | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/TwoColumn/ListTwoColumnCompareChanges.swift b/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/TwoColumn/ListTwoColumnCompareChanges.swift index 9f7895af..42284af9 100644 --- a/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/TwoColumn/ListTwoColumnCompareChanges.swift +++ b/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/TwoColumn/ListTwoColumnCompareChanges.swift @@ -20,7 +20,6 @@ //------------------------------------------------------ let containingStack: Stack - let stackSpacing: CGFloat = 5.0 //------------------------------------------------------ // MARK: - Initializers @@ -31,7 +30,7 @@ (view: rightHeadlineBodyLink, model: StackItemModel(percent: 50, verticalAlignment: .leading))], axis: .horizontal) - containingStack = Stack.createStack(with: [stackHeadline1], spacing: 0) + containingStack = Stack.createStack(with: [stackHeadline1], spacing: Padding.Component.gutterForApplicationWidth) super.init(style: style, reuseIdentifier: reuseIdentifier) } diff --git a/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/TwoColumn/ListTwoColumnDropdownSelectors.swift b/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/TwoColumn/ListTwoColumnDropdownSelectors.swift index eb8fb0ea..93350a63 100644 --- a/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/TwoColumn/ListTwoColumnDropdownSelectors.swift +++ b/MVMCoreUI/Atomic/Molecules/DesignedComponents/List/TwoColumn/ListTwoColumnDropdownSelectors.swift @@ -23,7 +23,7 @@ public override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { stack = Stack.createStack(with: [(view: leftDropDown, model: StackItemModel(percent: 50, horizontalAlignment: .fill)), (view: rightDropDown, model: StackItemModel(percent: 50, horizontalAlignment: .fill))], - axis: .horizontal, spacing: 9) + axis: .horizontal, spacing: Padding.Component.gutterForApplicationWidth) super.init(style: style, reuseIdentifier: reuseIdentifier) } From d3fb26f00551759c1e557e7877c2e613266c1ecf Mon Sep 17 00:00:00 2001 From: "Pfeil, Scott Robert" Date: Mon, 12 Apr 2021 14:34:15 -0400 Subject: [PATCH 13/14] review fixes --- MVMCoreUI/Atomic/Molecules/HeadersAndFooters/Header.swift | 2 +- .../Molecules/HeadersAndFooters/MoleculeHeaderView.swift | 2 +- MVMCoreUI/Styles/MFStyler+PaddingExtension.swift | 4 ++-- MVMCoreUI/Styles/MFStyler.h | 2 ++ MVMCoreUI/Styles/MFStyler.m | 3 +++ 5 files changed, 9 insertions(+), 4 deletions(-) diff --git a/MVMCoreUI/Atomic/Molecules/HeadersAndFooters/Header.swift b/MVMCoreUI/Atomic/Molecules/HeadersAndFooters/Header.swift index ff9a6766..f02586e5 100644 --- a/MVMCoreUI/Atomic/Molecules/HeadersAndFooters/Header.swift +++ b/MVMCoreUI/Atomic/Molecules/HeadersAndFooters/Header.swift @@ -27,7 +27,7 @@ open class HeaderView: Container { containerHelper.rightConstraint = margins.rightAnchor.constraint(equalTo: molecule.rightAnchor) containerHelper.rightConstraint?.priority = .defaultHigh containerHelper.rightConstraint?.isActive = true - molecule.widthAnchor.constraint(equalToConstant: 596).isActive = true + molecule.widthAnchor.constraint(equalToConstant: HeaderMaxWidth).isActive = true } // MARK: - MVMCoreViewProtocol diff --git a/MVMCoreUI/Atomic/Molecules/HeadersAndFooters/MoleculeHeaderView.swift b/MVMCoreUI/Atomic/Molecules/HeadersAndFooters/MoleculeHeaderView.swift index 1bbb78f9..5f3a0914 100644 --- a/MVMCoreUI/Atomic/Molecules/HeadersAndFooters/MoleculeHeaderView.swift +++ b/MVMCoreUI/Atomic/Molecules/HeadersAndFooters/MoleculeHeaderView.swift @@ -31,7 +31,7 @@ public class MoleculeHeaderView: MoleculeContainer { containerHelper.rightConstraint = margins.rightAnchor.constraint(equalTo: molecule.rightAnchor) containerHelper.rightConstraint?.priority = .defaultHigh containerHelper.rightConstraint?.isActive = true - molecule.widthAnchor.constraint(lessThanOrEqualToConstant: 596).isActive = true + molecule.widthAnchor.constraint(lessThanOrEqualToConstant: HeaderMaxWidth).isActive = true } open override func updateView(_ size: CGFloat) { diff --git a/MVMCoreUI/Styles/MFStyler+PaddingExtension.swift b/MVMCoreUI/Styles/MFStyler+PaddingExtension.swift index 37fa4a9f..bb96af26 100644 --- a/MVMCoreUI/Styles/MFStyler+PaddingExtension.swift +++ b/MVMCoreUI/Styles/MFStyler+PaddingExtension.swift @@ -10,7 +10,7 @@ import Foundation @objc public extension MFStyler { - @objc static func bridgeGetGutterSizeForForApplicationWidth() -> CGFloat { + @objc static func bridgeGetGutterSizeForApplicationWidth() -> CGFloat { Padding.Component.gutterForApplicationWidth } @@ -18,7 +18,7 @@ import Foundation Padding.Component.gutterFor(size: size) } - @objc static func bridgeGetColumnSizeForForApplicationWidth() -> CGFloat { + @objc static func bridgeGetColumnSizeForApplicationWidth() -> CGFloat { Padding.Component.columnFor(size: MVMCoreUISplitViewController.getApplicationViewWidth()) } diff --git a/MVMCoreUI/Styles/MFStyler.h b/MVMCoreUI/Styles/MFStyler.h index a3827044..d8676016 100644 --- a/MVMCoreUI/Styles/MFStyler.h +++ b/MVMCoreUI/Styles/MFStyler.h @@ -57,6 +57,8 @@ extern CGFloat const HeightTableSeperatorHeight; extern CGFloat const MFHeightForSwitch; extern CGFloat const MFMFWidthForSwitch; +extern CGFloat const HeaderMaxWidth; + // Color constants extern CGFloat const DisableOppacity; extern CGFloat const PaymentMethodViewHeightWidthMultiplier; diff --git a/MVMCoreUI/Styles/MFStyler.m b/MVMCoreUI/Styles/MFStyler.m index 17b3e7f1..8b9db95f 100644 --- a/MVMCoreUI/Styles/MFStyler.m +++ b/MVMCoreUI/Styles/MFStyler.m @@ -46,6 +46,9 @@ CGFloat const HeightTableSeperatorHeight = 1; CGFloat const MFHeightForSwitch = 22; CGFloat const MFWidthForSwitch = 42; + +CGFloat const HeaderMaxWidth = 596; + CGFloat const DisableOppacity = 0.5; CGFloat const PaymentMethodViewHeightWidthMultiplier = 0.55; CGFloat const MinCellHeight = 96; From 7e4c8d709ff436b527d5bf122598e0b74c1c4d55 Mon Sep 17 00:00:00 2001 From: "Pfeil, Scott Robert" Date: Tue, 13 Apr 2021 13:42:36 -0400 Subject: [PATCH 14/14] review changes --- MVMCoreUI/Styles/MFStyler+PaddingExtension.swift | 8 ++++---- MVMCoreUI/Styles/MFStyler.m | 12 ++++++------ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/MVMCoreUI/Styles/MFStyler+PaddingExtension.swift b/MVMCoreUI/Styles/MFStyler+PaddingExtension.swift index bb96af26..6da298e2 100644 --- a/MVMCoreUI/Styles/MFStyler+PaddingExtension.swift +++ b/MVMCoreUI/Styles/MFStyler+PaddingExtension.swift @@ -26,19 +26,19 @@ import Foundation Padding.Component.columnFor(size: size) } - @objc static func bridgeHorizontalPaddingFor(size: CGFloat) -> CGFloat { + @objc static func bridgeHorizontalPadding(for size: CGFloat) -> CGFloat { Padding.Component.horizontalPaddingForSize(size) } - @objc static func bridgeVerticalPaddingFor(size: CGFloat) -> CGFloat { + @objc static func bridgeVerticalPadding(for size: CGFloat) -> CGFloat { Padding.Component.verticalPaddingForSize(size) } - @objc static func bridgeSetDefaultMarginsFor(view: UIView, size: CGFloat, horizontal: Bool = true, vertical: Bool = false) { + @objc static func bridgeSetDefaultMargins(for view: UIView, size: CGFloat, horizontal: Bool = true, vertical: Bool = false) { Styler.setDefaultMarginsFor(view, size: size, horizontal: horizontal, vertical: vertical) } - @objc static func bridgeSetMarginsFor(view: UIView, size: CGFloat, horizontal: Bool, top: CGFloat, bottom: CGFloat) { + @objc static func bridgeSetMargins(for view: UIView, size: CGFloat, horizontal: Bool, top: CGFloat, bottom: CGFloat) { Styler.setMarginsFor(view, size: size, horizontal: horizontal ? nil : 0, top: top, bottom: bottom) } } diff --git a/MVMCoreUI/Styles/MFStyler.m b/MVMCoreUI/Styles/MFStyler.m index 8b9db95f..48ca21a8 100644 --- a/MVMCoreUI/Styles/MFStyler.m +++ b/MVMCoreUI/Styles/MFStyler.m @@ -81,19 +81,19 @@ CGFloat const LabelWithInternalButtonLineSpace = 2; #pragma mark - Spacing Defaults + (CGFloat)defaultHorizontalPaddingForApplicationWidth { - return [self bridgeHorizontalPaddingForSize:[MVMCoreUISplitViewController getApplicationViewWidth]]; + return [self bridgeHorizontalPaddingFor:[MVMCoreUISplitViewController getApplicationViewWidth]]; } + (CGFloat)defaultVerticalPaddingForApplicationWidth { - return [self bridgeVerticalPaddingForSize:[MVMCoreUISplitViewController getApplicationViewWidth]]; + return [self bridgeVerticalPaddingFor:[MVMCoreUISplitViewController getApplicationViewWidth]]; } + (CGFloat)defaultHorizontalPaddingForSize:(CGFloat)size { - return [self bridgeHorizontalPaddingForSize:size]; + return [self bridgeHorizontalPaddingFor:size]; } + (CGFloat)defaultVerticalPaddingForSize:(CGFloat)size { - return [self bridgeVerticalPaddingForSize:size]; + return [self bridgeVerticalPaddingFor:size]; } + (void)setDefaultMarginsForView:(nullable UIView *)view size:(CGFloat)size { @@ -102,12 +102,12 @@ CGFloat const LabelWithInternalButtonLineSpace = 2; + (void)setDefaultMarginsForView:(nullable UIView *)view size:(CGFloat)size horizontal:(BOOL)horizontal vertical:(BOOL)vertical { if (!view) { return; } - [self bridgeSetDefaultMarginsForView:view size:size horizontal:horizontal vertical:vertical]; + [self bridgeSetDefaultMarginsFor:view size:size horizontal:horizontal vertical:vertical]; } + (void)setMarginsForView:(nullable UIView *)view size:(CGFloat)size defaultHorizontal:(BOOL)horizontal top:(CGFloat)top bottom:(CGFloat)bottom { if (!view) { return; } - [self bridgeSetMarginsForView:view size:size horizontal:horizontal top:top bottom:bottom]; + [self bridgeSetMarginsFor:view size:size horizontal:horizontal top:top bottom:bottom]; } #pragma mark - 3.0 fonts