added width constraint check

Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
Matt Bruce 2024-05-10 11:02:54 -05:00
parent c02ba88a76
commit 30b380fceb

View File

@ -64,6 +64,8 @@ open class DropdownSelect: EntryFieldBase {
// MARK: - Public Properties // MARK: - Public Properties
//-------------------------------------------------- //--------------------------------------------------
open var inlineDisplayLabel = Label().with { open var inlineDisplayLabel = Label().with {
$0.setContentCompressionResistancePriority(.required, for: .vertical)
$0.setContentCompressionResistancePriority(.required, for: .horizontal)
$0.textAlignment = .left $0.textAlignment = .left
$0.textStyle = .boldBodyLarge $0.textStyle = .boldBodyLarge
$0.lineBreakMode = .byCharWrapping $0.lineBreakMode = .byCharWrapping
@ -72,6 +74,7 @@ open class DropdownSelect: EntryFieldBase {
open var selectedOptionLabel = Label().with { open var selectedOptionLabel = Label().with {
$0.setContentCompressionResistancePriority(.required, for: .vertical) $0.setContentCompressionResistancePriority(.required, for: .vertical)
$0.setContentCompressionResistancePriority(.required, for: .horizontal)
$0.textAlignment = .left $0.textAlignment = .left
$0.textStyle = .bodyLarge $0.textStyle = .bodyLarge
$0.lineBreakMode = .byCharWrapping $0.lineBreakMode = .byCharWrapping
@ -91,13 +94,15 @@ open class DropdownSelect: EntryFieldBase {
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Constraints // MARK: - Constraints
//-------------------------------------------------- //--------------------------------------------------
internal var maxWidthConstraint: NSLayoutConstraint?
internal var minWidthConstraint: NSLayoutConstraint?
internal var inlineWidthConstraint: NSLayoutConstraint? internal var inlineWidthConstraint: NSLayoutConstraint?
internal var titleLabelWidthConstraint: NSLayoutConstraint? internal var titleLabelWidthConstraint: NSLayoutConstraint?
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Configuration Properties // 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 // 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. /// Called once when a view is initialized and is used to Setup additional UI or other constants and configurations.
open override func setup() { 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.setContentCompressionResistancePriority(.required, for: .horizontal)
titleLabel.setContentHuggingPriority(.required, for: .horizontal) titleLabel.setContentHuggingPriority(.required, for: .horizontal)
@ -154,6 +161,7 @@ open class DropdownSelect: EntryFieldBase {
let controlStackView = UIStackView().with { let controlStackView = UIStackView().with {
$0.translatesAutoresizingMaskIntoConstraints = false $0.translatesAutoresizingMaskIntoConstraints = false
$0.axis = .horizontal $0.axis = .horizontal
$0.distribution = .fill
$0.spacing = VDSFormControls.spaceInset $0.spacing = VDSFormControls.spaceInset
} }
controlStackView.addArrangedSubview(dropdownField) controlStackView.addArrangedSubview(dropdownField)
@ -174,6 +182,20 @@ open class DropdownSelect: EntryFieldBase {
dropdownField.isUserInteractionEnabled = isReadOnly ? false : true dropdownField.isUserInteractionEnabled = isReadOnly ? false : true
selectedOptionLabel.surface = surface selectedOptionLabel.surface = surface
selectedOptionLabel.isEnabled = isEnabled 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. /// Resets to default settings.