2
2
mirror of https://github.com/mastodon/mastodon-ios synced 2025-04-11 22:58:02 +02:00

Do not extend caption text below control

Contributes to IOS-398
This commit is contained in:
shannon 2025-04-09 14:33:29 -04:00
parent e64bef0492
commit b9a997dba9

View File

@ -71,6 +71,24 @@ extension HorizontalAlignment {
static let menuAlign = HorizontalAlignment(MenuAlign.self)
}
extension VerticalAlignment {
enum ToggleAlign: AlignmentID {
static func defaultValue(in context: ViewDimensions) -> CGFloat {
context[.top]
}
}
static let toggleAlign = VerticalAlignment(ToggleAlign.self)
enum ButtonAlign: AlignmentID {
static func defaultValue(in context: ViewDimensions) -> CGFloat {
context[VerticalAlignment.center]
}
}
static let buttonAlign = VerticalAlignment(ButtonAlign.self)
}
struct NotificationPolicyView: View {
@Namespace private var menuAnimation
@StateObject var viewModel: NotificationPolicyViewModel
@ -169,31 +187,36 @@ struct NotificationPolicyView: View {
_ settingType: NotificationPolicyViewModel.NotificationFilterItem
) -> some View {
let controlAlignment = verticalAlignmentForControl(settingType)
HStack(alignment: controlAlignment) {
// title and subtitle
VStack(alignment: .leading) {
// title
HStack(alignment: verticalAlignmentForControl(settingType)) {
Text(settingType.title)
.multilineTextAlignment(.leading)
.font(.headline)
Spacer()
// menu or toggle
control(settingType)
.fixedSize()
}
HStack {
Spacer().frame(width: 5)
// subtitle
Text(settingType.subtitle)
.multilineTextAlignment(.leading)
.font(.subheadline)
Spacer()
}
Text(settingType.title)
.multilineTextAlignment(.leading)
.fixedSize()
.font(.headline)
.alignmentGuide(controlAlignment) { d in
switch controlAlignment {
case .buttonAlign:
return d[VerticalAlignment.center]
case .toggleAlign:
return d[.top]
default:
return d[.top]
}
}
Text(settingType.subtitle)
.multilineTextAlignment(.leading)
.font(.subheadline)
}
.frame(maxWidth: .infinity)
Spacer()
// menu or toggle
control(settingType)
.fixedSize()
}
.frame(maxWidth: .infinity)
}
@ViewBuilder func control(_ settingType: NotificationPolicyViewModel.NotificationFilterItem) -> some View {
@ -217,6 +240,7 @@ struct NotificationPolicyView: View {
}
.tint(Asset.Colors.Brand.blurple.swiftUIColor)
.fixedSize()
.alignmentGuide(.buttonAlign) { d in return d[VerticalAlignment.center] }
.transition(.identity)
.overlay {
if settingType == viewModel.isShowingMenu {
@ -236,15 +260,16 @@ struct NotificationPolicyView: View {
) {}
.tint(Asset.Colors.Brand.blurple.swiftUIColor)
.fixedSize()
.alignmentGuide(.toggleAlign) { d in d[.top] }
}
}
func verticalAlignmentForControl(_ settingType: NotificationPolicyViewModel.NotificationFilterItem) -> VerticalAlignment {
switch settingType {
case .notFollowing, .notFollowers, .newAccounts, .privateMentions, .limitedAccounts:
.center
.buttonAlign
case .adminReports, .adminSignups:
.top
.toggleAlign
}
}
}