|
|
@@ -15,30 +15,17 @@ struct PaywallView: View {
|
|
|
let scale = min(1, availableWidth / baseWidth, availableHeight / totalBaseHeight)
|
|
|
|
|
|
VStack(spacing: 0) {
|
|
|
- HStack {
|
|
|
- Button(action: onClose) {
|
|
|
- Image(systemName: "xmark")
|
|
|
- .font(.system(size: 14, weight: .semibold))
|
|
|
- .foregroundStyle(Color(red: 0.58, green: 0.61, blue: 0.66))
|
|
|
- .padding(8)
|
|
|
- }
|
|
|
- .buttonStyle(.plain)
|
|
|
-
|
|
|
- Spacer()
|
|
|
- }
|
|
|
- .padding(.horizontal, 20)
|
|
|
- .padding(.top, 8)
|
|
|
-
|
|
|
VStack(spacing: 18) {
|
|
|
titleSection
|
|
|
featuresSection
|
|
|
plansSection
|
|
|
ctaSection
|
|
|
+ Spacer(minLength: 0)
|
|
|
legalSection
|
|
|
}
|
|
|
.frame(width: baseWidth, height: baseContentHeight, alignment: .top)
|
|
|
.scaleEffect(scale, anchor: .top)
|
|
|
- .padding(.top, -8)
|
|
|
+ .padding(.top, 10)
|
|
|
|
|
|
Spacer(minLength: 0)
|
|
|
}
|
|
|
@@ -124,38 +111,37 @@ struct PaywallView: View {
|
|
|
}
|
|
|
|
|
|
private var legalSection: some View {
|
|
|
- VStack(spacing: 10) {
|
|
|
+ VStack(spacing: 12) {
|
|
|
Text("Your subscription will automatically renew unless auto-renew is turned off at least 24-hours before the end of the current subscription period.\nPayment will be charged to your iTunes account at confirmation of purchase.")
|
|
|
.font(.system(size: 12, weight: .medium))
|
|
|
.foregroundStyle(Color(red: 0.59, green: 0.62, blue: 0.68))
|
|
|
.multilineTextAlignment(.center)
|
|
|
.lineSpacing(2)
|
|
|
|
|
|
- HStack(spacing: 18) {
|
|
|
- legalLink("Privacy Policy")
|
|
|
- legalDivider
|
|
|
- legalLink("Terms of Use")
|
|
|
- legalDivider
|
|
|
- legalLink("Restore Purchases")
|
|
|
- legalDivider
|
|
|
- legalLink("EULA")
|
|
|
+ HStack(spacing: 0) {
|
|
|
+ footerLink("Continue with free plan", action: onClose)
|
|
|
+ footerLink("Privacy Policy")
|
|
|
+ footerLink("Support")
|
|
|
+ footerLink("Terms of Services")
|
|
|
}
|
|
|
- .padding(.bottom, 6)
|
|
|
+ .frame(height: 44)
|
|
|
+ .frame(maxWidth: .infinity)
|
|
|
+ .background(Color.white)
|
|
|
+ .clipShape(RoundedRectangle(cornerRadius: 0))
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private var legalDivider: some View {
|
|
|
- RoundedRectangle(cornerRadius: 1)
|
|
|
- .fill(Color(red: 0.84, green: 0.86, blue: 0.89))
|
|
|
- .frame(width: 1, height: 16)
|
|
|
- }
|
|
|
-
|
|
|
- private func legalLink(_ title: String) -> some View {
|
|
|
- Button(action: {}) {
|
|
|
+ private func footerLink(_ title: String, action: @escaping () -> Void = {}) -> some View {
|
|
|
+ Button(action: action) {
|
|
|
Text(title)
|
|
|
- .font(.system(size: 13, weight: .semibold))
|
|
|
- .foregroundStyle(Color(red: 0.07, green: 0.60, blue: 0.46))
|
|
|
+ .font(.system(size: 14, weight: .semibold))
|
|
|
+ .foregroundStyle(Color(red: 0.59, green: 0.62, blue: 0.68))
|
|
|
+ .lineLimit(1)
|
|
|
+ .minimumScaleFactor(0.75)
|
|
|
+ .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center)
|
|
|
+ .contentShape(Rectangle())
|
|
|
}
|
|
|
+ .frame(maxWidth: .infinity, maxHeight: .infinity)
|
|
|
.buttonStyle(.plain)
|
|
|
}
|
|
|
}
|