From dbeb5156c5e47602a162fe629a4a6ac3aa0a9cbf Mon Sep 17 00:00:00 2001 From: Kevin G Christiano Date: Wed, 26 Jun 2019 14:49:01 -0400 Subject: [PATCH] StandardListItemWithImage assembled. --- .../Views/StandardListItemWithImage.swift | 65 ++++++++++++------- 1 file changed, 42 insertions(+), 23 deletions(-) diff --git a/MVMCoreUI/Atoms/Views/StandardListItemWithImage.swift b/MVMCoreUI/Atoms/Views/StandardListItemWithImage.swift index 83ab4498..f35249ef 100644 --- a/MVMCoreUI/Atoms/Views/StandardListItemWithImage.swift +++ b/MVMCoreUI/Atoms/Views/StandardListItemWithImage.swift @@ -20,6 +20,14 @@ import UIKit let imageloader = MFLoadImageView() let leftContainer = ViewConstrainingView.empty() + //------------------------------------------------------ + // MARK: - Constraints + //------------------------------------------------------ + + var imageWidthConstraint: NSLayoutConstraint? + var imageHeightConstraint: NSLayoutConstraint? + var buttonTopConstraint: NSLayoutConstraint? + //------------------------------------------------------ // MARK: - Initialization //------------------------------------------------------ @@ -52,57 +60,59 @@ import UIKit button.setAsSecondaryCustom() + imageloader.imageView.contentMode = .scaleAspectFit + addSubview(leftContainer) + addSubview(imageloader) leftContainer.addSubview(title) leftContainer.addSubview(message) leftContainer.addSubview(button) - addSubview(imageloader) - - imageloader.imageView.contentMode = .scaleAspectFit - imageloader.translatesAutoresizingMaskIntoConstraints = false - button.translatesAutoresizingMaskIntoConstraints = false leftContainer.topAnchor.constraint(equalTo: topAnchor).isActive = true leftContainer.leadingAnchor.constraint(equalTo: layoutMarginsGuide.leadingAnchor).isActive = true + bottomAnchor.constraint(greaterThanOrEqualTo: leftContainer.bottomAnchor).isActive = true let leftContainerBottom = leftContainer.bottomAnchor.constraint(equalTo: bottomAnchor) leftContainerBottom.priority = UILayoutPriority(249) leftContainerBottom.isActive = true - bottomAnchor.constraint(greaterThanOrEqualTo: leftContainer.bottomAnchor).isActive = true - - title.topAnchor.constraint(equalTo: topAnchor).isActive = true + title.topAnchor.constraint(equalTo: leftContainer.topAnchor).isActive = true title.leadingAnchor.constraint(equalTo: leftContainer.leadingAnchor).isActive = true + title.trailingAnchor.constraint(equalTo: leftContainer.trailingAnchor).isActive = true title.widthAnchor.constraint(equalTo: leftContainer.widthAnchor).isActive = true - message.topAnchor.constraint(equalTo: title.bottomAnchor, constant: 6).isActive = true + message.topAnchor.constraint(equalTo: title.bottomAnchor, constant: PaddingOne).isActive = true message.leadingAnchor.constraint(equalTo: leftContainer.leadingAnchor).isActive = true + message.trailingAnchor.constraint(equalTo: leftContainer.trailingAnchor).isActive = true message.widthAnchor.constraint(equalTo: leftContainer.widthAnchor).isActive = true + buttonTopConstraint = button.topAnchor.constraint(equalTo: message.bottomAnchor, constant: PaddingTwo) + buttonTopConstraint?.isActive = true + + button.leadingAnchor.constraint(equalTo: leftContainer.leadingAnchor).isActive = true + button.bottomAnchor.constraint(equalTo: leftContainer.bottomAnchor).isActive = true + leftContainer.trailingAnchor.constraint(greaterThanOrEqualTo: button.trailingAnchor).isActive = true + imageloader.centerYAnchor.constraint(equalTo: centerYAnchor).isActive = true layoutMarginsGuide.trailingAnchor.constraint(equalTo: imageloader.trailingAnchor).isActive = true - imageloader.topAnchor.constraint(greaterThanOrEqualTo: topAnchor).isActive = true imageloader.leadingAnchor.constraint(equalTo: leftContainer.trailingAnchor, constant: 16).isActive = true + imageHeightConstraint = imageloader.heightAnchor.constraint(equalToConstant: 0) + imageHeightConstraint?.isActive = true + + imageWidthConstraint = imageloader.widthAnchor.constraint(equalToConstant: 0) + imageWidthConstraint?.isActive = true + bottomAnchor.constraint(greaterThanOrEqualTo: imageloader.bottomAnchor).isActive = true let imageloaderBottom = imageloader.bottomAnchor.constraint(equalTo: bottomAnchor) imageloaderBottom.priority = UILayoutPriority(249) imageloaderBottom.isActive = true - button.topAnchor.constraint(equalTo: message.bottomAnchor, constant: 12).isActive = true - button.leadingAnchor.constraint(equalTo: leftContainer.leadingAnchor).isActive = true - button.bottomAnchor.constraint(equalTo: leftContainer.bottomAnchor).isActive = true - - title.setContentHuggingPriority(UILayoutPriority(rawValue: 901), for: .horizontal) - message.setContentHuggingPriority(UILayoutPriority(rawValue: 902), for: .horizontal) + title.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 901), for: .horizontal) + message.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 902), for: .horizontal) title.setContentHuggingPriority(.required, for: .vertical) message.setContentHuggingPriority(.required, for: .vertical) - - title.setContentCompressionResistancePriority(.required, for: .vertical) - message.setContentCompressionResistancePriority(.required, for: .vertical) - - imageloader.imageView.setContentCompressionResistancePriority(.required, for: .vertical) } override open func updateView(_ size: CGFloat) { @@ -113,6 +123,8 @@ import UIKit button.updateView(size) imageloader.updateView(size) leftContainer.updateView(size) + + buttonTopConstraint?.constant = message.hasText ? PaddingTwo : PaddingOne } override open func reset() { @@ -121,6 +133,7 @@ import UIKit title.text = "" message.text = "" imageloader.imageView.image = nil + imageWidthConstraint?.constant = 0 backgroundColor = nil } @@ -135,10 +148,16 @@ import UIKit imageloader.setWithJSON(dictionary.optionalDictionaryForKey("imageView"), delegateObject: delegateObject as? MVMCoreUIDelegateObject, additionalData: additionalData) if let imageJSON = dictionary.optionalDictionaryForKey("imageView") { + let width = CGFloat(imageJSON.floatForKey("width")) + let height = CGFloat(imageJSON.floatForKey("height")) + imageloader.loadImage(withName: imageJSON.optionalStringForKey("image"), format: imageJSON.optionalStringForKey("imageFormat"), - width: imageJSON.int32ForKey("imageWidth") as NSNumber, - height: imageJSON.int32ForKey("imageHeight") as NSNumber) + width: width as NSNumber, + height: height as NSNumber) + + imageWidthConstraint?.constant = width + imageHeightConstraint?.constant = height } if let backgroundColorHex = dictionary[KeyBackgroundColor] as? String {