|
|
@@ -2637,7 +2637,8 @@ private extension ViewController {
|
|
2637
|
2637
|
let contentStack = NSStackView()
|
|
2638
|
2638
|
contentStack.translatesAutoresizingMaskIntoConstraints = false
|
|
2639
|
2639
|
contentStack.orientation = .vertical
|
|
2640
|
|
- contentStack.spacing = 14
|
|
|
2640
|
+ contentStack.spacing = 10
|
|
|
2641
|
+ contentStack.distribution = .fill
|
|
2641
|
2642
|
contentStack.alignment = .centerX
|
|
2642
|
2643
|
panel.addSubview(contentStack)
|
|
2643
|
2644
|
let paywallLayoutWidth: CGFloat = 980
|
|
|
@@ -2717,6 +2718,13 @@ private extension ViewController {
|
|
2717
|
2718
|
contentStack.addArrangedSubview(benefitsRow)
|
|
2718
|
2719
|
benefitsRow.widthAnchor.constraint(equalTo: contentStack.widthAnchor).isActive = true
|
|
2719
|
2720
|
|
|
|
2721
|
+ let midTopSpacer = NSView()
|
|
|
2722
|
+ midTopSpacer.translatesAutoresizingMaskIntoConstraints = false
|
|
|
2723
|
+ midTopSpacer.setContentHuggingPriority(.defaultLow, for: .vertical)
|
|
|
2724
|
+ midTopSpacer.setContentCompressionResistancePriority(.defaultLow, for: .vertical)
|
|
|
2725
|
+ midTopSpacer.heightAnchor.constraint(greaterThanOrEqualToConstant: 8).isActive = true
|
|
|
2726
|
+ contentStack.addArrangedSubview(midTopSpacer)
|
|
|
2727
|
+
|
|
2720
|
2728
|
let plansRow = NSStackView()
|
|
2721
|
2729
|
plansRow.translatesAutoresizingMaskIntoConstraints = false
|
|
2722
|
2730
|
plansRow.orientation = .horizontal
|
|
|
@@ -2768,6 +2776,13 @@ private extension ViewController {
|
|
2768
|
2776
|
plansRow.widthAnchor.constraint(equalTo: contentStack.widthAnchor).isActive = true
|
|
2769
|
2777
|
updatePaywallPlanSelection()
|
|
2770
|
2778
|
|
|
|
2779
|
+ let midBottomSpacer = NSView()
|
|
|
2780
|
+ midBottomSpacer.translatesAutoresizingMaskIntoConstraints = false
|
|
|
2781
|
+ midBottomSpacer.setContentHuggingPriority(.defaultLow, for: .vertical)
|
|
|
2782
|
+ midBottomSpacer.setContentCompressionResistancePriority(.defaultLow, for: .vertical)
|
|
|
2783
|
+ midBottomSpacer.heightAnchor.constraint(greaterThanOrEqualToConstant: 8).isActive = true
|
|
|
2784
|
+ contentStack.addArrangedSubview(midBottomSpacer)
|
|
|
2785
|
+
|
|
2771
|
2786
|
let offer = textLabel(paywallOfferText(for: selectedPremiumPlan), font: NSFont.systemFont(ofSize: 13, weight: .semibold), color: palette.textPrimary)
|
|
2772
|
2787
|
offer.alignment = .center
|
|
2773
|
2788
|
paywallOfferLabel = offer
|
|
|
@@ -2822,6 +2837,15 @@ private extension ViewController {
|
|
2822
|
2837
|
secure.bottomAnchor.constraint(equalTo: secureWrap.bottomAnchor, constant: -4)
|
|
2823
|
2838
|
])
|
|
2824
|
2839
|
|
|
|
2840
|
+ let footerTopSpacer = NSView()
|
|
|
2841
|
+ footerTopSpacer.translatesAutoresizingMaskIntoConstraints = false
|
|
|
2842
|
+ contentStack.addArrangedSubview(footerTopSpacer)
|
|
|
2843
|
+ footerTopSpacer.setContentHuggingPriority(.defaultLow, for: .vertical)
|
|
|
2844
|
+ footerTopSpacer.setContentCompressionResistancePriority(.defaultLow, for: .vertical)
|
|
|
2845
|
+ footerTopSpacer.heightAnchor.constraint(greaterThanOrEqualToConstant: 8).isActive = true
|
|
|
2846
|
+ midTopSpacer.heightAnchor.constraint(equalTo: midBottomSpacer.heightAnchor).isActive = true
|
|
|
2847
|
+ midBottomSpacer.heightAnchor.constraint(equalTo: footerTopSpacer.heightAnchor).isActive = true
|
|
|
2848
|
+
|
|
2825
|
2849
|
let footer = paywallFooterLinks()
|
|
2826
|
2850
|
contentStack.addArrangedSubview(footer)
|
|
2827
|
2851
|
footer.widthAnchor.constraint(equalTo: contentStack.widthAnchor).isActive = true
|
|
|
@@ -2829,8 +2853,8 @@ private extension ViewController {
|
|
2829
|
2853
|
NSLayoutConstraint.activate([
|
|
2830
|
2854
|
contentStack.centerXAnchor.constraint(equalTo: panel.centerXAnchor),
|
|
2831
|
2855
|
contentStack.widthAnchor.constraint(equalToConstant: paywallLayoutWidth),
|
|
2832
|
|
- contentStack.topAnchor.constraint(equalTo: panel.topAnchor, constant: 20),
|
|
2833
|
|
- contentStack.bottomAnchor.constraint(lessThanOrEqualTo: panel.bottomAnchor, constant: -16)
|
|
|
2856
|
+ contentStack.topAnchor.constraint(equalTo: panel.topAnchor, constant: 30),
|
|
|
2857
|
+ contentStack.bottomAnchor.constraint(equalTo: panel.bottomAnchor, constant: -20)
|
|
2834
|
2858
|
])
|
|
2835
|
2859
|
|
|
2836
|
2860
|
refreshPaywallStoreUI()
|
|
|
@@ -2942,7 +2966,7 @@ private extension ViewController {
|
|
2942
|
2966
|
func paywallFooterLinks() -> NSView {
|
|
2943
|
2967
|
let wrap = NSView()
|
|
2944
|
2968
|
wrap.translatesAutoresizingMaskIntoConstraints = false
|
|
2945
|
|
- wrap.heightAnchor.constraint(equalToConstant: 34).isActive = true
|
|
|
2969
|
+ wrap.heightAnchor.constraint(equalToConstant: 56).isActive = true
|
|
2946
|
2970
|
|
|
2947
|
2971
|
let row = NSStackView()
|
|
2948
|
2972
|
row.translatesAutoresizingMaskIntoConstraints = false
|
|
|
@@ -2959,8 +2983,8 @@ private extension ViewController {
|
|
2959
|
2983
|
NSLayoutConstraint.activate([
|
|
2960
|
2984
|
row.leadingAnchor.constraint(equalTo: wrap.leadingAnchor),
|
|
2961
|
2985
|
row.trailingAnchor.constraint(equalTo: wrap.trailingAnchor),
|
|
2962
|
|
- row.topAnchor.constraint(equalTo: wrap.topAnchor),
|
|
2963
|
|
- row.bottomAnchor.constraint(equalTo: wrap.bottomAnchor)
|
|
|
2986
|
+ row.topAnchor.constraint(greaterThanOrEqualTo: wrap.topAnchor),
|
|
|
2987
|
+ row.bottomAnchor.constraint(equalTo: wrap.bottomAnchor, constant: -4)
|
|
2964
|
2988
|
])
|
|
2965
|
2989
|
|
|
2966
|
2990
|
return wrap
|