diff --git a/VDS/Components/Notification/Notification.swift b/VDS/Components/Notification/Notification.swift index 274ad8af..bd2f778c 100644 --- a/VDS/Components/Notification/Notification.swift +++ b/VDS/Components/Notification/Notification.swift @@ -69,17 +69,25 @@ open class Notification: View { } private var labelsView = UIStackView().with { + $0.spacing = 1.0 $0.translatesAutoresizingMaskIntoConstraints = false - $0.alignment = .top + $0.alignment = .fill + $0.distribution = .equalSpacing $0.axis = .vertical } - private var labelButtonView = UIStackView().with { + private var labelButtonView = View().with { $0.translatesAutoresizingMaskIntoConstraints = false - $0.alignment = .top - $0.distribution = .fillEqually - $0.axis = .vertical - $0.spacing = VDSLayout.Spacing.space2X.value + } + + private var labelButtonViewSpacing: CGFloat { + let spacing: CGFloat = UIDevice.isIPad ? 20 : 16 + return switch layout { + case .vertical: + 0 + case .horizontal: + spacing + } } internal var onCloseSubscriber: AnyCancellable? @@ -215,6 +223,15 @@ open class Notification: View { return 1232 } + private var labelViewWidthConstraint: NSLayoutConstraint? + private var labelViewBottomConstraint: NSLayoutConstraint? + private var labelViewAndButtonViewConstraint: NSLayoutConstraint? + private var buttonViewTopConstraint: NSLayoutConstraint? + private var typeIconWidthConstraint: NSLayoutConstraint? + private var closeIconWidthConstraint: NSLayoutConstraint? + private var buttonGroupCenterYConstraint: NSLayoutConstraint? + private var buttonGroupBottomConstraint: NSLayoutConstraint? + //-------------------------------------------------- // MARK: - Overrides //-------------------------------------------------- @@ -240,12 +257,29 @@ open class Notification: View { ]) maxWidthConstraint = layoutGuide.widthAnchor.constraint(lessThanOrEqualToConstant: maxViewWidth) - labelButtonView.addArrangedSubview(labelsView) - + labelButtonView.addSubview(labelsView) + labelsView + .pinTop() + .pinLeading() + labelViewWidthConstraint = labelsView.widthAnchor.constraint(equalTo: labelButtonView.widthAnchor, multiplier: 1.0) + labelViewWidthConstraint?.activate() + labelViewBottomConstraint = labelButtonView.bottomAnchor.constraint(equalTo: labelsView.bottomAnchor) + + labelButtonView.addSubview(buttonGroup) + buttonGroup + .pinTrailing() + buttonGroupBottomConstraint = labelButtonView.bottomAnchor.constraint(equalTo: buttonGroup.bottomAnchor) + buttonGroupCenterYConstraint = buttonGroup.centerYAnchor.constraint(equalTo: labelButtonView.centerYAnchor) + labelViewAndButtonViewConstraint = buttonGroup.topAnchor.constraint(equalTo: labelsView.bottomAnchor, constant: 3.0) + buttonGroup.widthAnchor.constraint(equalTo: labelsView.widthAnchor).activate() + mainStackView.addArrangedSubview(typeIcon) mainStackView.addArrangedSubview(labelButtonView) mainStackView.addArrangedSubview(closeButton) - + + typeIconWidthConstraint = typeIcon.width(constant: typeIcon.size.dimensions.width) + closeIconWidthConstraint = closeButton.width(constant: closeButton.size.dimensions.width) + //labels titleLabel.textColorConfiguration = textColorConfiguration.eraseToAnyColorable() subTitleLabel.textColorConfiguration = textColorConfiguration.eraseToAnyColorable() @@ -342,28 +376,28 @@ open class Notification: View { secondaryButton.onClick = secondaryButtonModel.onClick buttons.append(secondaryButton) } - + labelViewWidthConstraint?.deactivate() if buttons.isEmpty { - labelsView.setCustomSpacing(0, after: subTitleLabel) - buttonGroup.removeFromSuperview() + buttonGroup.isHidden = true + labelViewWidthConstraint = labelsView.widthAnchor.constraint(equalTo: labelButtonView.widthAnchor) + buttonGroup.buttons.removeAll() } else { labelsView.setCustomSpacing(VDSLayout.Spacing.space3X.value, after: subTitleLabel) - buttonGroup.buttons = buttons - labelButtonView.axis = layout == .vertical ? .vertical : .horizontal - labelButtonView.addArrangedSubview(buttonGroup) - - buttonGroup - .pinLeading() - .pinTrailing() + buttonGroup.isHidden = false + labelViewWidthConstraint = labelsView.widthAnchor.constraint(equalTo: labelButtonView.widthAnchor, multiplier: layout == .vertical ? 1.0 : 0.5, constant: layout == .vertical ? 0 : -labelButtonViewSpacing) } + labelViewWidthConstraint?.activate() } private func setConstraints() { - maxWidthConstraint?.constant = maxViewWidth maxWidthConstraint?.isActive = UIDevice.isIPad - + labelViewAndButtonViewConstraint?.isActive = layout == .vertical && !buttonGroup.buttons.isEmpty + typeIconWidthConstraint?.constant = typeIcon.size.dimensions.width + closeIconWidthConstraint?.constant = closeButton.size.dimensions.width + labelViewBottomConstraint?.isActive = layout == .horizontal || buttonGroup.buttons.isEmpty + buttonGroupCenterYConstraint?.isActive = layout == .horizontal + buttonGroupBottomConstraint?.isActive = layout == .vertical } } -