diff --git a/MVMCoreUI/Atoms/Views/LeftRightLabelView.swift b/MVMCoreUI/Atoms/Views/LeftRightLabelView.swift index 8573ca87..220e4fb0 100644 --- a/MVMCoreUI/Atoms/Views/LeftRightLabelView.swift +++ b/MVMCoreUI/Atoms/Views/LeftRightLabelView.swift @@ -14,19 +14,8 @@ import Foundation // MARK: - Properties //------------------------------------------------------ - var title: Label? - var message: Label? - var detail: Label? - - var titleWidth: NSLayoutConstraint? - var messageWidth: NSLayoutConstraint? - var detailWidth: NSLayoutConstraint? - - var messageTrail: NSLayoutConstraint? - var titleTrail: NSLayoutConstraint? - - var titleDetailBaseline: NSLayoutConstraint? - var messageDetailBaseline: NSLayoutConstraint? + var leftText: Label? + var rightText: Label? //------------------------------------------------------ // MARK: - Initialization @@ -51,126 +40,80 @@ import Foundation override open func setupView() { super.setupView() - translatesAutoresizingMaskIntoConstraints = false defaultState() } + //------------------------------------------------------ + // MARK: - View Lifecycle + //------------------------------------------------------ + + override open func updateView(_ size: CGFloat) { + super.updateView(size) + + leftText?.updateView(size) + rightText?.updateView(size) + + layoutIfNeeded() + layoutSubviews() + } + //------------------------------------------------------ // MARK: - Setup //------------------------------------------------------ - override open func updateView(_ size: CGFloat) { - super.updateView(size) - - title?.updateView(size) - message?.updateView(size) - detail?.updateView(size) - - if let titleText = title?.text, let messageText = message?.text, titleText.isEmpty && messageText.isEmpty { - detailWidth?.constant = size - detail?.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -PaddingTwo).isActive = true - titleDetailBaseline?.isActive = false - return - } - - if let detailText = detail?.text, detailText.isEmpty { - messageTrail?.isActive = false - titleTrail?.isActive = false - message?.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true - title?.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true - detailWidth?.constant = 0 - titleWidth?.constant = size - messageWidth?.constant = size - return - } - - if let titleText = title?.text, titleText.isEmpty { - messageWidth?.constant = size * 0.6 - PaddingOne - detailWidth?.constant = size * 0.2 - titleWidth?.constant = 0 - titleDetailBaseline?.isActive = false - messageDetailBaseline?.isActive = true - return - } - - if let messageText = message?.text, messageText.isEmpty { - titleWidth?.constant = size * 0.6 - PaddingOne - detailWidth?.constant = size * 0.2 - messageWidth?.constant = 0 - return - } - - titleWidth?.constant = size * 0.6 - PaddingOne - messageWidth?.constant = size * 0.6 - PaddingOne - detailWidth?.constant = size * 0.2 - } - func defaultState() { - if title == nil && message == nil && detail == nil { + if leftText == nil && rightText == nil { - let title = Label.commonLabelB1(true) - let message = Label.commonLabelB2(true) - let detail = Label.commonLabelB1(true) + let leftText = Label.commonLabelB1(true) + let rightText = Label.commonLabelB1(true) - self.title = title - self.message = message - self.detail = detail + self.leftText = leftText + self.rightText = rightText - addSubview(title) - addSubview(message) - addSubview(detail) + addSubview(leftText) + addSubview(rightText) - title.textAlignment = .left - message.textAlignment = .left - detail.textAlignment = .right + leftText.textAlignment = .left + rightText.textAlignment = .right - title.topAnchor.constraint(equalTo: topAnchor).isActive = true - title.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true - let titleTrail = title.trailingAnchor.constraint(greaterThanOrEqualTo: detail.leadingAnchor) - titleTrail.isActive = true + // leftText.topAnchor.constraint(equalTo: topAnchor).isActive = true + // leftText.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true + leftText.trailingAnchor.constraint(equalTo: rightText.leadingAnchor).isActive = true - message.topAnchor.constraint(equalTo: title.bottomAnchor).isActive = true - message.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true - message.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true - let messageTrail = message.trailingAnchor.constraint(greaterThanOrEqualTo: detail.leadingAnchor) - messageTrail.isActive = true + NSLayoutConstraint.constraintPinSubview(leftText, pinTop: true, pinBottom: false, pinLeft: true, pinRight: false) - detail.topAnchor.constraint(equalTo: topAnchor).isActive = true - detail.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true + let leftTextBottom = leftText.bottomAnchor.constraint(equalTo: bottomAnchor) + leftTextBottom.priority = UILayoutPriority(249) + leftTextBottom.isActive = true + bottomAnchor.constraint(greaterThanOrEqualTo: leftText.bottomAnchor).isActive = true - titleDetailBaseline = detail.firstBaselineAnchor.constraint(equalTo: title.firstBaselineAnchor) - titleDetailBaseline?.isActive = true + // rightText.topAnchor.constraint(equalTo: topAnchor).isActive = true + // rightText.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true + NSLayoutConstraint.constraintPinSubview(rightText, pinTop: true, pinBottom: false, pinLeft: false, pinRight: true) - messageDetailBaseline = detail.firstBaselineAnchor.constraint(equalTo: message.firstBaselineAnchor) - titleWidth = title.widthAnchor.constraint(lessThanOrEqualToConstant: bounds.width * 0.8 - PaddingOne) - titleWidth?.priority = UILayoutPriority(rawValue: 751) - titleWidth?.isActive = true + let rightTextBottom = rightText.bottomAnchor.constraint(equalTo: bottomAnchor) + rightTextBottom.priority = UILayoutPriority(rawValue: 249) + rightTextBottom.isActive = true + bottomAnchor.constraint(greaterThanOrEqualTo: rightText.bottomAnchor).isActive = true - messageWidth = message.widthAnchor.constraint(lessThanOrEqualToConstant: bounds.width * 0.8 - PaddingOne) - messageWidth?.priority = UILayoutPriority(rawValue: 750) - messageWidth?.isActive = true + let leftTextWidth = leftText.widthAnchor.constraint(equalTo: widthAnchor, multiplier: 0.7) + leftTextWidth.priority = UILayoutPriority(rawValue: 100) + leftTextWidth.isActive = true - detailWidth = detail.widthAnchor.constraint(equalToConstant: bounds.width * 0.2) - detailWidth?.priority = UILayoutPriority(rawValue: 850) - detailWidth?.isActive = true + // let rightTextWidth = rightText.widthAnchor.constraint(equalTo: widthAnchor, multiplier: 0.3) + // rightTextWidth.priority = UILayoutPriority(rawValue: 100) + // rightTextWidth.isActive = true - title.setContentHuggingPriority(UILayoutPriority(rawValue: 251), for: .horizontal) - title.setContentHuggingPriority(UILayoutPriority(rawValue: 249), for: .vertical) - title.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 750), for: .horizontal) - title.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 250), for: .vertical) + rightText.firstBaselineAnchor.constraint(equalTo: leftText.firstBaselineAnchor).isActive = true - message.setContentHuggingPriority(UILayoutPriority(rawValue: 251), for: .horizontal) - message.setContentHuggingPriority(UILayoutPriority(rawValue: 249), for: .vertical) - message.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 749), for: .horizontal) - message.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 250), for: .vertical) + leftText.setContentHuggingPriority(UILayoutPriority(rawValue: 801), for: .horizontal) + // leftText.setContentHuggingPriority(.required, for: .vertical) - detail.setContentHuggingPriority(UILayoutPriority(rawValue: 750), for: .horizontal) - detail.setContentHuggingPriority(UILayoutPriority(rawValue: 249), for: .vertical) - detail.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 750), for: .horizontal) - detail.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 999), for: .vertical) + rightText.setContentHuggingPriority(UILayoutPriority(rawValue: 802), for: .horizontal) + // rightText.setContentHuggingPriority(.required, for: .vertical) } } @@ -178,9 +121,8 @@ import Foundation guard let dictionary = actionMap else { return } - title?.setWithJSON(dictionary.optionalDictionaryForKey("title"), delegateObject: delegateObject as! MVMCoreUIDelegateObject, additionalData: additionalData) - message?.setWithJSON(dictionary.optionalDictionaryForKey("message"), delegateObject: delegateObject as! MVMCoreUIDelegateObject, additionalData: additionalData) - detail?.setWithJSON(dictionary.optionalDictionaryForKey("detail"), delegateObject: delegateObject as! MVMCoreUIDelegateObject, additionalData: additionalData) + leftText?.setWithJSON(dictionary.optionalDictionaryForKey("leftText"), delegateObject: delegateObject as? MVMCoreUIDelegateObject, additionalData: additionalData) + rightText?.setWithJSON(dictionary.optionalDictionaryForKey("rightText"), delegateObject: delegateObject as? MVMCoreUIDelegateObject, additionalData: additionalData) if let backgroundColorHex = dictionary[KeyBackgroundColor] as? String { backgroundColor = UIColor.mfGet(forHex: backgroundColorHex) @@ -197,7 +139,11 @@ import Foundation } open override func setWithJSON(_ json: [AnyHashable: Any]?, delegateObject: DelegateObject?, additionalData: [AnyHashable: Any]?) { - super.setWithJSON(json, delegateObject: delegateObject as! MVMCoreUIDelegateObject, additionalData: additionalData) + super.setWithJSON(json, delegateObject: delegateObject as? MVMCoreUIDelegateObject, additionalData: additionalData) setWithJSON(actionMap: json, delegateObject: delegateObject, additionalData: additionalData) } + + open override func needsToBeConstrained() -> Bool { + return true + } }