Gutter and margin fixes

This commit is contained in:
Pfeil, Scott Robert 2021-03-25 13:44:21 -04:00
parent ba6f52e182
commit 9cde90fdf4
9 changed files with 84 additions and 37 deletions

View File

@ -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 = "<group>"; };
D236E5B3241FEB1000C38625 /* ListTwoColumnPriceDescriptionModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListTwoColumnPriceDescriptionModel.swift; sourceTree = "<group>"; };
D236E5B6242007C500C38625 /* MVMControllerModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MVMControllerModelProtocol.swift; sourceTree = "<group>"; };
D23A8FD5260CDF01007E14CE /* MFStyler+PaddingExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MFStyler+PaddingExtension.swift"; sourceTree = "<group>"; };
D23EA7FA2475F09800D60C34 /* CarouselItemProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CarouselItemProtocol.swift; sourceTree = "<group>"; };
D23EA7FD247EBBB700D60C34 /* NavigationLabelButtonModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationLabelButtonModel.swift; sourceTree = "<group>"; };
D23EA7FF247EBD6C00D60C34 /* LabelBarButtonItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabelBarButtonItem.swift; sourceTree = "<group>"; };
@ -2000,6 +2002,7 @@
D29DF13921E68637003B2FB9 /* MFStyler.m */,
0A6682A92435125F00AD3CA1 /* Styler.swift */,
0A6682AB243531C300AD3CA1 /* Padding.swift */,
D23A8FD5260CDF01007E14CE /* MFStyler+PaddingExtension.swift */,
);
path = Styles;
sourceTree = "<group>";
@ -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 */,

View File

@ -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)

View File

@ -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 {

View File

@ -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
}

View File

@ -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)

View File

@ -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
}
}

View File

@ -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)
}
}

View File

@ -14,6 +14,7 @@
#import "MVMCoreUISplitViewController.h"
@import MVMCore.MVMCoreDispatchUtility;
#import <MVMCoreUI/MVMCoreUIUtility.h>
#import <MVMCoreUI/MVMCoreUI-Swift.h>
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

View File

@ -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)
}
}
}