From 30b380fceb26e07ba359d0773d0bbfb95e538b46 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Fri, 10 May 2024 11:02:54 -0500 Subject: [PATCH] added width constraint check Signed-off-by: Matt Bruce --- .../DropdownSelect/DropdownSelect.swift | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/VDS/Components/DropdownSelect/DropdownSelect.swift b/VDS/Components/DropdownSelect/DropdownSelect.swift index c401267e..85c2c104 100644 --- a/VDS/Components/DropdownSelect/DropdownSelect.swift +++ b/VDS/Components/DropdownSelect/DropdownSelect.swift @@ -64,6 +64,8 @@ open class DropdownSelect: EntryFieldBase { // MARK: - Public Properties //-------------------------------------------------- open var inlineDisplayLabel = Label().with { + $0.setContentCompressionResistancePriority(.required, for: .vertical) + $0.setContentCompressionResistancePriority(.required, for: .horizontal) $0.textAlignment = .left $0.textStyle = .boldBodyLarge $0.lineBreakMode = .byCharWrapping @@ -72,6 +74,7 @@ open class DropdownSelect: EntryFieldBase { open var selectedOptionLabel = Label().with { $0.setContentCompressionResistancePriority(.required, for: .vertical) + $0.setContentCompressionResistancePriority(.required, for: .horizontal) $0.textAlignment = .left $0.textStyle = .bodyLarge $0.lineBreakMode = .byCharWrapping @@ -91,13 +94,15 @@ open class DropdownSelect: EntryFieldBase { //-------------------------------------------------- // MARK: - Constraints //-------------------------------------------------- + internal var maxWidthConstraint: NSLayoutConstraint? + internal var minWidthConstraint: NSLayoutConstraint? internal var inlineWidthConstraint: NSLayoutConstraint? internal var titleLabelWidthConstraint: NSLayoutConstraint? //-------------------------------------------------- // MARK: - Configuration Properties //-------------------------------------------------- - internal override var containerSize: CGSize { CGSize(width: showInlineLabel ? minWidthInlineLabel : width ?? minWidthDefault, height: 44) } + internal override var containerSize: CGSize { .init(width: minWidthDefault, height: 44) } //-------------------------------------------------- // MARK: - Overrides @@ -105,7 +110,9 @@ open class DropdownSelect: EntryFieldBase { /// Called once when a view is initialized and is used to Setup additional UI or other constants and configurations. open override func setup() { - super.setup() + super.setup() + minWidthConstraint = containerView.widthGreaterThanEqualTo(constant: containerSize.width) + maxWidthConstraint = containerView.width(constant: containerSize.width) titleLabel.setContentCompressionResistancePriority(.required, for: .horizontal) titleLabel.setContentHuggingPriority(.required, for: .horizontal) @@ -154,6 +161,7 @@ open class DropdownSelect: EntryFieldBase { let controlStackView = UIStackView().with { $0.translatesAutoresizingMaskIntoConstraints = false $0.axis = .horizontal + $0.distribution = .fill $0.spacing = VDSFormControls.spaceInset } controlStackView.addArrangedSubview(dropdownField) @@ -174,6 +182,20 @@ open class DropdownSelect: EntryFieldBase { dropdownField.isUserInteractionEnabled = isReadOnly ? false : true selectedOptionLabel.surface = surface selectedOptionLabel.isEnabled = isEnabled + + //set the width constraints + if let width { + widthConstraint?.constant = width + widthConstraint?.isActive = true + minWidthConstraint?.isActive = false + maxWidthConstraint?.isActive = false + } else { + minWidthConstraint?.constant = showInlineLabel ? minWidthInlineLabel : minWidthDefault + maxWidthConstraint?.constant = frame.width + widthConstraint?.isActive = false + minWidthConstraint?.isActive = true + maxWidthConstraint?.isActive = true + } } /// Resets to default settings.