|
|
@@ -645,7 +645,8 @@ final class PaywallView: NSView, AppearanceRefreshable {
|
|
|
ctaButton.heightAnchor.constraint(equalToConstant: 48),
|
|
|
ctaButton.bottomAnchor.constraint(lessThanOrEqualTo: footerLinks.topAnchor, constant: -14),
|
|
|
|
|
|
- footerLinks.centerXAnchor.constraint(equalTo: panel.centerXAnchor),
|
|
|
+ footerLinks.leadingAnchor.constraint(equalTo: panel.leadingAnchor, constant: 28),
|
|
|
+ footerLinks.trailingAnchor.constraint(equalTo: panel.trailingAnchor, constant: -28),
|
|
|
footerLinks.bottomAnchor.constraint(equalTo: panel.bottomAnchor, constant: -20),
|
|
|
])
|
|
|
|
|
|
@@ -707,32 +708,49 @@ final class PaywallView: NSView, AppearanceRefreshable {
|
|
|
let termsLink = PaywallFooterLink(title: "Terms of Service")
|
|
|
let supportLink = PaywallFooterLink(title: "Support")
|
|
|
|
|
|
- let separator1 = makeFooterSeparator()
|
|
|
- let separator2 = makeFooterSeparator()
|
|
|
- let separator3 = makeFooterSeparator()
|
|
|
- let separator4 = makeFooterSeparator()
|
|
|
+ let links: [(PaywallFooterLink, Bool)] = [
|
|
|
+ (continueWithFreePlanLink, true),
|
|
|
+ (restoreLink, true),
|
|
|
+ (privacyLink, true),
|
|
|
+ (termsLink, true),
|
|
|
+ (supportLink, false),
|
|
|
+ ]
|
|
|
|
|
|
- let linksStack = NSStackView(views: [
|
|
|
- continueWithFreePlanLink, separator1, restoreLink, separator2, privacyLink, separator3, termsLink, separator4, supportLink,
|
|
|
- ])
|
|
|
+ let linkGroups = links.map { link, showsSeparator in
|
|
|
+ makeFooterLinkGroup(link: link, showsSeparator: showsSeparator)
|
|
|
+ }
|
|
|
+
|
|
|
+ let linksStack = NSStackView(views: linkGroups)
|
|
|
linksStack.orientation = .horizontal
|
|
|
- linksStack.spacing = 8
|
|
|
+ linksStack.spacing = 0
|
|
|
linksStack.alignment = .centerY
|
|
|
- linksStack.distribution = .fillProportionally
|
|
|
+ linksStack.distribution = .equalSpacing
|
|
|
linksStack.translatesAutoresizingMaskIntoConstraints = false
|
|
|
|
|
|
container.addSubview(linksStack)
|
|
|
NSLayoutConstraint.activate([
|
|
|
- linksStack.centerXAnchor.constraint(equalTo: container.centerXAnchor),
|
|
|
- linksStack.leadingAnchor.constraint(greaterThanOrEqualTo: container.leadingAnchor),
|
|
|
- linksStack.trailingAnchor.constraint(lessThanOrEqualTo: container.trailingAnchor),
|
|
|
+ linksStack.leadingAnchor.constraint(equalTo: container.leadingAnchor),
|
|
|
+ linksStack.trailingAnchor.constraint(equalTo: container.trailingAnchor),
|
|
|
linksStack.topAnchor.constraint(equalTo: container.topAnchor),
|
|
|
- linksStack.bottomAnchor.constraint(equalTo: container.bottomAnchor)
|
|
|
+ linksStack.bottomAnchor.constraint(equalTo: container.bottomAnchor),
|
|
|
])
|
|
|
|
|
|
return container
|
|
|
}
|
|
|
|
|
|
+ private func makeFooterLinkGroup(link: PaywallFooterLink, showsSeparator: Bool) -> NSView {
|
|
|
+ let group = NSStackView()
|
|
|
+ group.orientation = .horizontal
|
|
|
+ group.spacing = 8
|
|
|
+ group.alignment = .centerY
|
|
|
+ group.translatesAutoresizingMaskIntoConstraints = false
|
|
|
+ group.addArrangedSubview(link)
|
|
|
+ if showsSeparator {
|
|
|
+ group.addArrangedSubview(makeFooterSeparator())
|
|
|
+ }
|
|
|
+ return group
|
|
|
+ }
|
|
|
+
|
|
|
private func makeFooterSeparator() -> NSView {
|
|
|
let separator = NSView()
|
|
|
separator.translatesAutoresizingMaskIntoConstraints = false
|