From 842bb6f0ad55c36cf7fadaf5c3ff40205db3e04e Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Fri, 28 Jun 2024 18:08:50 -0500 Subject: [PATCH] updated to work at 100% width of parent if not set as well as calculating height if there is an aspect ration. --- .../TileContainer/TileContainer.swift | 63 +++++++++---------- VDS/Components/Tilelet/Tilelet.swift | 4 ++ 2 files changed, 33 insertions(+), 34 deletions(-) diff --git a/VDS/Components/TileContainer/TileContainer.swift b/VDS/Components/TileContainer/TileContainer.swift index 62e96890..d7c3f74f 100644 --- a/VDS/Components/TileContainer/TileContainer.swift +++ b/VDS/Components/TileContainer/TileContainer.swift @@ -117,10 +117,6 @@ open class TileContainerBase: Control where Padding $0.setContentCompressionResistancePriority(.defaultHigh, for: .vertical) } - open var distribution: LayoutDistribution = .fill { didSet { setNeedsUpdate() } } - - open var alignment: LayoutAlignment = .center { didSet { setNeedsUpdate() } } - //-------------------------------------------------- // MARK: - Public Properties //-------------------------------------------------- @@ -136,7 +132,7 @@ open class TileContainerBase: Control where Padding } /// This controls the aspect ratio for the component. - open var aspectRatio: AspectRatio = .none { didSet { setNeedsUpdate() } } + open var aspectRatio: AspectRatio = .ratio1x1 { didSet { setNeedsUpdate() } } /// Sets the background color for the component. open var color: BackgroundColor? { didSet { setNeedsUpdate() } } @@ -190,11 +186,6 @@ open class TileContainerBase: Control where Padding internal var widthConstraint: NSLayoutConstraint? internal var heightConstraint: NSLayoutConstraint? - internal var contentViewTopConstraint: NSLayoutConstraint? - internal var contentViewBottomConstraint: NSLayoutConstraint? - internal var contentViewLeadingConstraint: NSLayoutConstraint? - internal var contentViewTrailingConstraint: NSLayoutConstraint? - //-------------------------------------------------- // MARK: - Configuration //-------------------------------------------------- @@ -231,15 +222,21 @@ open class TileContainerBase: Control where Padding open override func setup() { super.setup() isAccessibilityElement = false + addSubview(containerView) + containerView.pinToSuperView() + containerView.addSubview(backgroundImageView) - containerView.addSubview(contentView) - containerView.addSubview(highlightView) - backgroundImageView.pinToSuperView() - widthConstraint = containerView.widthAnchor.constraint(equalToConstant: 0).deactivate() - heightConstraint = containerView.heightAnchor.constraint(equalToConstant: 0).deactivate() + containerView.addSubview(contentView) + contentView.pinToSuperView() + + containerView.addSubview(highlightView) + highlightView.pinToSuperView() + + widthConstraint = widthAnchor.constraint(equalToConstant: 0).deactivate() + heightConstraint = heightAnchor.constraint(equalToConstant: 0).deactivate() backgroundImageView.setContentHuggingPriority(.defaultLow, for: .horizontal) backgroundImageView.setContentHuggingPriority(.defaultLow, for: .vertical) @@ -248,19 +245,11 @@ open class TileContainerBase: Control where Padding backgroundImageView.isUserInteractionEnabled = false backgroundImageView.isHidden = true - contentViewTopConstraint = contentView.pinTop(anchor: containerView.topAnchor, constant: padding.value) - contentViewBottomConstraint = containerView.pinBottom(anchor: contentView.bottomAnchor, constant: padding.value) - contentViewLeadingConstraint = contentView.pinLeading(anchor: containerView.leadingAnchor, constant: padding.value) - contentViewTrailingConstraint = containerView.pinTrailing(anchor: contentView.trailingAnchor, constant: padding.value) - - highlightView.pin(containerView) highlightView.isHidden = true highlightView.backgroundColor = .clear //corner radius containerView.layer.cornerRadius = cornerRadius - backgroundImageView.layer.cornerRadius = cornerRadius - highlightView.layer.cornerRadius = cornerRadius containerView.clipsToBounds = true containerView.bridge_isAccessibilityElementBlock = { [weak self] in self?.onClickSubscriber != nil } @@ -311,11 +300,9 @@ open class TileContainerBase: Control where Padding containerView.layer.borderColor = borderColorConfiguration.getColor(self).cgColor containerView.layer.borderWidth = showBorder ? VDSFormControls.borderWidth : 0 - contentViewTopConstraint?.constant = padding.value - contentViewLeadingConstraint?.constant = padding.value - contentViewBottomConstraint?.constant = padding.value - contentViewTrailingConstraint?.constant = padding.value - + contentView.removeConstraints() + contentView.pinToSuperView(.uniform(padding.value)) + updateContainerView() } @@ -472,14 +459,22 @@ open class TileContainerBase: Control where Padding containerViewWidth = size.width containerViewHeight = size.height } - sizeContainerView(width: containerViewWidth, height: containerViewHeight) - containerView.applyAlignment(alignment) - } else { - containerView.applyAlignment(distribution == .fill ? .fill : alignment) - if distribution == .fill, !isPinnedHorizontallyToSuperview(), let size = horizontalPinnedSize() { - sizeContainerView(width: size.width) + if let parentSize = horizontalPinnedSize() { + + var containerViewWidth: CGFloat? + var containerViewHeight: CGFloat? + + let size = ratioSize(for: parentSize.width) + if aspectRatio == .none { + containerViewWidth = size.width + } else { + containerViewWidth = size.width + containerViewHeight = size.height + } + + sizeContainerView(width: containerViewWidth, height: containerViewHeight) } } } diff --git a/VDS/Components/Tilelet/Tilelet.swift b/VDS/Components/Tilelet/Tilelet.swift index 0a7178e2..0da20709 100644 --- a/VDS/Components/Tilelet/Tilelet.swift +++ b/VDS/Components/Tilelet/Tilelet.swift @@ -303,6 +303,8 @@ open class Tilelet: TileContainerBase { open override func setup() { super.setup() color = .black + aspectRatio = .none + addContentView(stackView) //badge @@ -385,6 +387,8 @@ open class Tilelet: TileContainerBase { /// Resets to default settings. open override func reset() { shouldUpdateView = false + super.reset() + aspectRatio = .none color = .black //models badgeModel = nil