From 6d2220cbbf9b97beb912df9808ff46c9971cd6f3 Mon Sep 17 00:00:00 2001 From: "Christiano, Kevin" Date: Fri, 24 May 2019 09:19:22 -0400 Subject: [PATCH] latest version of ItemDetailView. --- MVMCoreUI/Atoms/Views/ItemDetailView.swift | 121 +++++++++++++++++---- 1 file changed, 98 insertions(+), 23 deletions(-) diff --git a/MVMCoreUI/Atoms/Views/ItemDetailView.swift b/MVMCoreUI/Atoms/Views/ItemDetailView.swift index 7533d416..b21e8504 100644 --- a/MVMCoreUI/Atoms/Views/ItemDetailView.swift +++ b/MVMCoreUI/Atoms/Views/ItemDetailView.swift @@ -18,6 +18,13 @@ import Foundation var message: Label? var detail: Label? + var titleWidth: NSLayoutConstraint? + var messageWidth: NSLayoutConstraint? + var detailWidth: NSLayoutConstraint? + + var messageTrail: NSLayoutConstraint? + var titleTrail: NSLayoutConstraint? + //------------------------------------------------------ // MARK: - Initialization //------------------------------------------------------ @@ -52,31 +59,99 @@ import Foundation override open func updateView(_ size: CGFloat) { super.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 + 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 + 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 { - title = Label.commonLabelB1(false) - message = Label.commonLabelB2(false) - detail = Label.commonLabelB1(false) + if title == nil && message == nil && detail == nil { - if let title = title, let message = message, let detail = detail { - addSubview(title) - addSubview(message) - addSubview(detail) - - title.textAlignment = .left - message.textAlignment = .left - detail.textAlignment = .right - - NSLayoutConstraint.constraintPinSubview(title, pinTop: true, topConstant: PaddingTwo, pinBottom: false, bottomConstant: 0, pinLeft: true, leftConstant: 16, pinRight: false, rightConstant: 0) - NSLayoutConstraint.constraintPinSubview(message, pinTop: false, topConstant: 0, pinBottom: true, bottomConstant: PaddingTwo, pinLeft: true, leftConstant: 16, pinRight: true, rightConstant: 16) - NSLayoutConstraint.constraintPinSubview(detail, pinTop: true, topConstant: PaddingTwo, pinBottom: false, bottomConstant: 0, pinLeft: false, leftConstant: 0, pinRight: true, rightConstant: 16) - NSLayoutConstraint(pinFirstView: title, toSecondView: message, withConstant: 0, directionVertical: true)?.isActive = true - - title.trailingAnchor.constraint(lessThanOrEqualTo: detail.leadingAnchor, constant: PaddingOne).isActive = true - } + let title = Label.commonLabelB1(false) + let message = Label.commonLabelB2(false) + let detail = Label.commonLabelB1(false) + + self.title = title + self.message = message + self.detail = detail + + addSubview(title) + addSubview(message) + addSubview(detail) + + title.textAlignment = .left + message.textAlignment = .left + detail.textAlignment = .right + + NSLayoutConstraint.constraintPinSubview(title, pinTop: true, topConstant: PaddingTwo, pinBottom: false, bottomConstant: 0, pinLeft: true, leftConstant: 0, pinRight: false, rightConstant: 0) + NSLayoutConstraint.constraintPinSubview(message, pinTop: false, topConstant: 0, pinBottom: true, bottomConstant: PaddingTwo, pinLeft: true, leftConstant: 0, pinRight: false, rightConstant: 0) + NSLayoutConstraint.constraintPinSubview(detail, pinTop: true, topConstant: PaddingTwo, pinBottom: false, bottomConstant: 0, pinLeft: false, leftConstant: 0, pinRight: true, rightConstant: 0) + NSLayoutConstraint(pinFirstView: title, toSecondView: message, withConstant: 0, directionVertical: true)?.isActive = true + + let titleTrail = title.trailingAnchor.constraint(greaterThanOrEqualTo: detail.leadingAnchor, constant: PaddingOne) + titleTrail.isActive = true + let messageTrail = message.trailingAnchor.constraint(greaterThanOrEqualTo: detail.leadingAnchor, constant: PaddingOne) + messageTrail.isActive = true + + titleWidth = title.widthAnchor.constraint(lessThanOrEqualToConstant: bounds.width * 0.8 - PaddingOne) + titleWidth?.priority = UILayoutPriority(rawValue: 750) + titleWidth?.isActive = true + + messageWidth = message.widthAnchor.constraint(lessThanOrEqualToConstant: bounds.width * 0.8 - PaddingOne) + messageWidth?.priority = UILayoutPriority(rawValue: 750) + messageWidth?.isActive = true + + detailWidth = detail.widthAnchor.constraint(equalToConstant: bounds.width * 0.2) + detailWidth?.priority = UILayoutPriority(rawValue: 755) + detailWidth?.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) + + 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) + + detail.setContentHuggingPriority(UILayoutPriority(rawValue: 251), for: .horizontal) + detail.setContentHuggingPriority(UILayoutPriority(rawValue: 249), for: .vertical) + detail.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 750), for: .horizontal) + detail.setContentCompressionResistancePriority(.required, for: .vertical) } } @@ -84,9 +159,9 @@ import Foundation guard let dictionary = actionMap else { return } - title?.text = dictionary.stringForkey(KeyTitle) - message?.text = dictionary.stringForkey(KeyMessage) - detail?.text = dictionary.stringForkey("detail") + title?.setWithJSON(dictionary.optionalDictionaryForKey("title"), delegateObject: delegateObject, additionalData: additionalData) + message?.setWithJSON(dictionary.optionalDictionaryForKey("message"), delegateObject: delegateObject, additionalData: additionalData) + detail?.setWithJSON(dictionary.optionalDictionaryForKey("detail"), delegateObject: delegateObject, additionalData: additionalData) if let backgroundColorHex = dictionary[KeyBackgroundColor] as? String { backgroundColor = UIColor.mfGet(forHex: backgroundColorHex)