Changed the way LeftRightLabelView works.

This commit is contained in:
Christiano, Kevin 2019-05-31 11:38:30 -04:00
parent efec81871c
commit c884b97fff

View File

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