Merge branch 'develop' into feature/more_inversion

This commit is contained in:
Kevin G Christiano 2020-05-27 09:42:14 -04:00
commit 3ab8969b1b
16 changed files with 72 additions and 84 deletions

View File

@ -402,11 +402,11 @@ public typealias ActionBlock = () -> ()
attributedString.insert(mutableString, at: imageAtt.location)
case let fontAtt as LabelAttributeFontModel:
if let fontStyle = fontAtt.style?.rawValue {
let styles = MFStyler.styleGetAttributedString("0", withStyle: fontStyle)
if let fontStyle = fontAtt.style {
attributedString.removeAttribute(.font, range: range)
attributedString.removeAttribute(.foregroundColor, range: range)
attributedString.addAttributes(styles.attributes(at: 0, effectiveRange: nil), range: range)
attributedString.addAttribute(.font, value: fontStyle.getFont(), range: range)
attributedString.addAttribute(.foregroundColor, value: fontStyle.color(), range: range)
} else {
let fontSize = fontAtt.size
var font: UIFont?
@ -677,9 +677,6 @@ public typealias ActionBlock = () -> ()
@objc public func updateView(_ size: CGFloat) {
scaleSize = size as NSNumber
// This fixes a defect for when there are multiple labels stacked in a list item. Sometime some labels will not fill their available space.
preferredMaxLayoutWidth = size
if let originalAttributedString = originalAttributedString {
let attributedString = NSMutableAttributedString(attributedString: originalAttributedString)
attributedString.removeAttribute(.font, range: NSRange(location: 0, length: attributedString.length))

View File

@ -21,7 +21,7 @@ import Foundation
//--------------------------------------------------
public override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
stack = Stack<StackModel>.createStack(with: [(view: leftLabel, model: StackItemModel(horizontalAlignment: .fill)),
(view: eyebrowHeadlineBodyLink, model: StackItemModel(horizontalAlignment: .leading))],
(view: eyebrowHeadlineBodyLink, model: StackItemModel(horizontalAlignment: .fill))],
axis: .horizontal)
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
@ -35,6 +35,7 @@ import Foundation
//--------------------------------------------------
override open func setupView() {
super.setupView()
leftLabel.setContentHuggingPriority(.defaultHigh, for: .horizontal)
addMolecule(stack)
stack.restack()
}
@ -57,4 +58,10 @@ import Foundation
super.reset()
leftLabel.styleTitle2XLarge(true)
}
open override func layoutSubviews() {
super.layoutSubviews()
// This fixes a defect body text where it doesn't layout correctly.
eyebrowHeadlineBodyLink.body.preferredMaxLayoutWidth = eyebrowHeadlineBodyLink.frame.width
}
}

View File

@ -155,8 +155,8 @@ import UIKit
super.set(with: model, delegateObject, additionalData)
self.delegateObject = delegateObject
self.additionalData = additionalData
self.selectedIndex = tabsModel?.selectedIndex ?? 0
self.bottomLine.backgroundColor = tabsModel?.selectedColor.uiColor
selectedIndex = tabsModel?.selectedIndex ?? 0
bottomLine.backgroundColor = tabsModel?.selectedColor.uiColor
reloadData()
}
}
@ -236,13 +236,13 @@ extension Tabs: UICollectionViewDelegateFlowLayout {
collect.selectItem(at: indexPath, animated: animated, scrollPosition: .centeredHorizontally)
guard let tabCell = collect.cellForItem(at: indexPath) as? TabItemCell, let tabsModel = self.tabsModel else { return }
self.moveBottomLine(toIndex: indexPath, animated: animated, cell: tabCell)
moveBottomLine(toIndex: indexPath, animated: animated, cell: tabCell)
tabCell.label.textColor = tabsModel.selectedColor.uiColor
tabCell.updateAccessibility(indexPath: indexPath, selected: true, tabsModel: tabsModel)
tabCell.setNeedsDisplay()
tabCell.setNeedsLayout()
tabCell.layoutIfNeeded()
self.delegate?.didSelectItem(indexPath, tabs: self)
delegate?.didSelectItem(indexPath, tabs: self)
}
}

View File

@ -10,10 +10,11 @@ import UIKit
/// A collection item that is a container for any molecule.
open class MoleculeCollectionViewCell: CollectionViewCell {
open override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
super.set(with: model, delegateObject, additionalData)
guard let collectionModel = model as? MoleculeCollectionItemModel else { return }
if molecule == nil {
if let moleculeView = MoleculeObjectMapping.shared()?.createMolecule(collectionModel.molecule, delegateObject: delegateObject, additionalData: additionalData) {
addMolecule(moleculeView)
@ -21,16 +22,15 @@ open class MoleculeCollectionViewCell: CollectionViewCell {
} else {
molecule?.set(with: collectionModel.molecule, delegateObject, additionalData)
}
guard let molecule = molecule as? (UIView & MVMCoreUIViewConstrainingProtocol) else { return }
containerHelper.set(with: collectionModel, for: molecule)
accessibilityElements = molecule.subviews
}
open override func reset() {
super.reset()
molecule?.reset()
backgroundColor = .white
backgroundColor = .mvmWhite
}
open class func nameForReuse(_ model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> String? {

View File

@ -16,7 +16,6 @@ public class NavigationItemModel: NavigationItemModelProtocol, PanelNavigationIt
public var title: String?
public var hidden: Bool
public var backgroundColor: Color?
public var translucent: Bool
public var tintColor: Color
public var line: LineModel?
public var backButton: NavigationItemButtonModel?
@ -29,7 +28,6 @@ public class NavigationItemModel: NavigationItemModelProtocol, PanelNavigationIt
public init() {
hidden = false
translucent = false
backgroundColor = Color(uiColor: .white)
tintColor = Color(uiColor: .black)
line = LineModel(type: .standard)
@ -42,7 +40,6 @@ public class NavigationItemModel: NavigationItemModelProtocol, PanelNavigationIt
case title
case hidden
case backgroundColor
case translucent
case tintColor
case line
case backButton
@ -57,7 +54,6 @@ public class NavigationItemModel: NavigationItemModelProtocol, PanelNavigationIt
title = try typeContainer.decodeIfPresent(String.self, forKey: .title)
hidden = try typeContainer.decodeIfPresent(Bool.self, forKey: .hidden) ?? false
backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor) ?? Color(uiColor: .white)
translucent = try typeContainer.decodeIfPresent(Bool.self, forKey: .translucent) ?? false
tintColor = try typeContainer.decodeIfPresent(Color.self, forKey: .tintColor) ?? Color(uiColor: .black)
line = try typeContainer.decodeIfPresent(LineModel.self, forKey: .line)
backButton = try typeContainer.decodeIfPresent(NavigationItemButtonModel.self, forKey: .backButton) ?? NavigationItemButtonModel(with: "back", action: ActionBackModel())
@ -72,7 +68,6 @@ public class NavigationItemModel: NavigationItemModelProtocol, PanelNavigationIt
try container.encodeIfPresent(title, forKey: .title)
try container.encode(hidden, forKey: .hidden)
try container.encode(backgroundColor, forKey: .backgroundColor)
try container.encode(translucent, forKey: .translucent)
try container.encode(tintColor, forKey: .tintColor)
try container.encodeIfPresent(line, forKey: .line)
try container.encodeIfPresent(backButton, forKey: .backButton)

View File

@ -12,7 +12,6 @@ public protocol NavigationItemModelProtocol {
var title: String? { get set }
var hidden: Bool { get set }
var backgroundColor: Color? { get set }
var translucent: Bool { get set }
var tintColor: Color { get set }
var line: LineModel? { get set }
var backButton: NavigationItemButtonModel? { get set }

View File

@ -8,6 +8,7 @@
import UIKit
open class ModalMoleculeListTemplate: MoleculeListTemplate {
//--------------------------------------------------
// MARK: - Properties
@ -15,13 +16,20 @@ open class ModalMoleculeListTemplate: MoleculeListTemplate {
public var closeButton: Button?
//--------------------------------------------------
// MARK: - Lifecycle
//--------------------------------------------------
override open func handleNewData() {
super.handleNewData()
closeButton = MVMCoreUICommonViewsUtility.addCloseButton(to: view, action: { _ in
MVMCoreNavigationHandler.shared()?.removeCurrentViewController()
})
}
open override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
accessibilityElements = [closeButton as Any, tableView as Any]
UIAccessibility.post(notification: .layoutChanged, argument: closeButton)
}
}

View File

@ -8,6 +8,7 @@
import UIKit
open class MoleculeListTemplate: ThreeLayerTableViewController, TemplateProtocol {
//--------------------------------------------------
// MARK: - Stored Properties

View File

@ -8,9 +8,13 @@
import Foundation
/// A base collection view cell with basic mvm functionality.
open class CollectionViewCell: UICollectionViewCell, MoleculeViewProtocol, MVMCoreViewProtocol, CollectionTemplateItemProtocol {
//--------------------------------------------------
// MARK: - Properties
//--------------------------------------------------
// Convenience helpers
open var molecule: MoleculeViewProtocol?
public let containerHelper = ContainerHelper()
@ -18,9 +22,13 @@ open class CollectionViewCell: UICollectionViewCell, MoleculeViewProtocol, MVMCo
/// The width, used for establishing columns
open var width: CGFloat?
private var initialSetupPerformed = false
//--------------------------------------------------
// MARK: - Properties
//--------------------------------------------------
// MARK: - Inits
public override init(frame: CGRect) {
super.init(frame: .zero)
@ -39,6 +47,10 @@ open class CollectionViewCell: UICollectionViewCell, MoleculeViewProtocol, MVMCo
}
}
//--------------------------------------------------
// MARK: - Properties
//--------------------------------------------------
// MARK: - MVMCoreViewProtocol
open func setupView() {
isAccessibilityElement = false
@ -58,15 +70,19 @@ open class CollectionViewCell: UICollectionViewCell, MoleculeViewProtocol, MVMCo
open func reset() {
molecule?.reset()
backgroundColor = .white
backgroundColor = .mvmWhite
width = nil
}
//--------------------------------------------------
// MARK: - Properties
//--------------------------------------------------
// MARK: - MoleculeViewProtocol
open func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
guard let model = model as? CollectionItemModelProtocol else { return }
self.model = model
if let moleculeModel = model as? MoleculeModelProtocol,
let backgroundColor = moleculeModel.backgroundColor {
self.backgroundColor = backgroundColor.uiColor
@ -84,8 +100,11 @@ open class CollectionViewCell: UICollectionViewCell, MoleculeViewProtocol, MVMCo
containerHelper.constrainView(molecule)
self.molecule = molecule
}
//--------------------------------------------------
// MARK: - CollectionTemplateItemProtocol
//--------------------------------------------------
public func set(width: CGFloat) {
self.width = width
}
@ -94,11 +113,11 @@ open class CollectionViewCell: UICollectionViewCell, MoleculeViewProtocol, MVMCo
override open func preferredLayoutAttributesFitting(_ layoutAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutAttributes {
let autoLayoutAttributes = super.preferredLayoutAttributesFitting(layoutAttributes)
guard let width = width else { return autoLayoutAttributes }
let targetSize = CGSize(width: width, height: 0)
let newSize = contentView.systemLayoutSizeFitting(targetSize, withHorizontalFittingPriority: UILayoutPriority.required, verticalFittingPriority: UILayoutPriority.defaultLow)
let newSize = contentView.systemLayoutSizeFitting(targetSize, withHorizontalFittingPriority: .required, verticalFittingPriority: .defaultLow)
let newFrame = CGRect(origin: autoLayoutAttributes.frame.origin, size: newSize)
autoLayoutAttributes.frame = newFrame
return autoLayoutAttributes
}
}
}

View File

@ -206,7 +206,6 @@ import UIKit
caret.translatesAutoresizingMaskIntoConstraints = true
caret.isAccessibilityElement = true
caret.accessibilityTraits = .button
caret.accessibilityLabel = "Caret,"
caret.accessibilityHint = MVMCoreUIUtility.hardcodedString(withKey: "AccTabHint")
caret.size = .small(.vertical)
if let size = caret.size?.dimensions() {

View File

@ -277,31 +277,6 @@ extension UIColor {
return .white
}
public class func setBackgroundColor(_ color: UIColor, for navigationBar: UINavigationBar, isTransparent: Bool) {
DispatchQueue.main.async {
let view = UIView(frame: CGRect(x: 0, y: 0, width: 1, height: 1))
view.backgroundColor = color
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.isOpaque, 0.0)
if let context = UIGraphicsGetCurrentContext() {
view.layer.render(in: context)
}
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
if isTransparent {
navigationBar.setBackgroundImage(UIImage(), for: .default)
navigationBar.isTranslucent = false
} else {
navigationBar.setBackgroundImage(image, for: .default)
}
}
}
/// - parameter color: The UIColor intended to retrieve its hex value.
public class func hexString(for color: UIColor) -> String? {

View File

@ -183,9 +183,6 @@
// Returns a gradient lighter color;
+ (nonnull UIColor *)mfGradientColor:(nullable UIColor *)color;
// Sets the background color for the nav bar.
+ (void)mfSetBackgroundColorForNavigationBar:(nonnull UIColor *)color navigationBar:(nonnull UINavigationBar *)navigationBar transparent:(BOOL)transparent;
#pragma mark - Hex String
+ (nullable NSString *)hexStringForColor:(nonnull UIColor*)color;

View File

@ -389,27 +389,6 @@
return [UIColor whiteColor];
}
+ (void)mfSetBackgroundColorForNavigationBar:(nonnull UIColor *)color navigationBar:(nonnull UINavigationBar *)navigationBar transparent:(BOOL)transparent {
[MVMCoreDispatchUtility performBlockOnMainThread:^{
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];
view.backgroundColor = color;
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
if (transparent) {
[navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
[navigationBar setTranslucent:NO];
} else {
[navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
}
}];
}
#pragma mark - Hex String
+ (nullable NSString *)hexStringForColor:(nonnull UIColor*)color {

View File

@ -18,7 +18,7 @@ import UIKit
/// Provides MVM styling to the navigation bar. Returns a reference to the line.
public static func style(_ navigationBar: UINavigationBar) -> Line {
UIColor.mfSetBackgroundColor(forNavigationBar: .white, navigationBar: navigationBar, transparent: false)
navigationBar.backgroundColor = .white
navigationBar.shadowImage = UIImage()
navigationBar.isOpaque = true
navigationBar.tintColor = .black
@ -72,7 +72,7 @@ import UIKit
viewController.navigationItem.hidesBackButton = (navigationItemModel.backButton != nil)
navigationController.setNavigationBarHidden(navigationItemModel.hidden, animated: true)
UIColor.setBackgroundColor(navigationItemModel.backgroundColor?.uiColor ?? .white, for: navigationController.navigationBar, isTransparent: navigationItemModel.translucent)
navigationController.navigationBar.barTintColor = navigationItemModel.backgroundColor?.uiColor ?? .white
let tint = navigationItemModel.tintColor.uiColor
navigationController.navigationBar.tintColor = tint

View File

@ -81,6 +81,16 @@ open class Styler {
}
}
public func color() -> UIColor {
switch self {
case .B3:
return .mvmCoolGray6
default:
return .mvmBlack
}
}
/// Determines if the selected font case is bold or regular.
public func isBold() -> Bool {

View File

@ -248,6 +248,8 @@
// Sets the color
if (color) {
self.button.layer.borderColor = color.CGColor;
[self.button setTitleColor:color forState:UIControlStateNormal];
[self.closeButton setTintColor:color];
}