Merge branch 'develop' into feature/more_inversion
This commit is contained in:
commit
3ab8969b1b
@ -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))
|
||||
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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? {
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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 }
|
||||
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@ -8,6 +8,7 @@
|
||||
|
||||
import UIKit
|
||||
|
||||
|
||||
open class MoleculeListTemplate: ThreeLayerTableViewController, TemplateProtocol {
|
||||
//--------------------------------------------------
|
||||
// MARK: - Stored Properties
|
||||
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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() {
|
||||
|
||||
@ -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? {
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 {
|
||||
|
||||
|
||||
@ -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];
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user