Detail sheet: reorder to title → route → photo
User asked for this order. Photo now slots between routeSection and LIVE STATE rather than living as a hero above the title. Used a -16 horizontal padding so the photo still goes full-bleed inside the otherwise-16pt-padded content stack. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -38,52 +38,54 @@ struct LiveFlightDetailSheet: View {
|
||||
var body: some View {
|
||||
NavigationStack {
|
||||
ScrollView {
|
||||
VStack(alignment: .leading, spacing: 0) {
|
||||
VStack(alignment: .leading, spacing: 16) {
|
||||
header
|
||||
|
||||
// Depart → Arrival sits directly under the callsign
|
||||
// header — it's the single most important thing the
|
||||
// user opened the sheet to see.
|
||||
routeSection
|
||||
|
||||
// Aircraft photo follows the route. Negative
|
||||
// horizontal padding lets the photo break out of the
|
||||
// 16pt content padding to be full-bleed edge-to-edge.
|
||||
photoBanner
|
||||
.padding(.horizontal, -16)
|
||||
|
||||
VStack(alignment: .leading, spacing: 16) {
|
||||
header
|
||||
if let photo = aircraftPhoto, let credit = photo.photographer {
|
||||
photoCredit(name: credit, link: photo.detailLink)
|
||||
}
|
||||
|
||||
// Depart → Arrival lives directly under the callsign
|
||||
// header — it's the single most important thing the
|
||||
// user opened the sheet to see.
|
||||
routeSection
|
||||
Divider()
|
||||
|
||||
Divider()
|
||||
Text("LIVE STATE")
|
||||
.font(FlightTheme.label())
|
||||
.foregroundStyle(FlightTheme.textTertiary)
|
||||
.tracking(1)
|
||||
|
||||
Text("LIVE STATE")
|
||||
.font(FlightTheme.label())
|
||||
.foregroundStyle(FlightTheme.textTertiary)
|
||||
.tracking(1)
|
||||
liveStateGrid
|
||||
|
||||
liveStateGrid
|
||||
|
||||
if recentFlights.count > 1 {
|
||||
Text("RECENT FLIGHTS")
|
||||
.font(FlightTheme.label())
|
||||
.foregroundStyle(FlightTheme.textTertiary)
|
||||
.tracking(1)
|
||||
.padding(.top, 4)
|
||||
|
||||
ForEach(recentFlights.prefix(8), id: \.self) { flight in
|
||||
recentFlightRow(flight)
|
||||
}
|
||||
}
|
||||
|
||||
Text("AIRCRAFT")
|
||||
if recentFlights.count > 1 {
|
||||
Text("RECENT FLIGHTS")
|
||||
.font(FlightTheme.label())
|
||||
.foregroundStyle(FlightTheme.textTertiary)
|
||||
.tracking(1)
|
||||
.padding(.top, 4)
|
||||
|
||||
aircraftCard
|
||||
|
||||
if let photo = aircraftPhoto, let credit = photo.photographer {
|
||||
photoCredit(name: credit, link: photo.detailLink)
|
||||
ForEach(recentFlights.prefix(8), id: \.self) { flight in
|
||||
recentFlightRow(flight)
|
||||
}
|
||||
}
|
||||
.padding(16)
|
||||
|
||||
Text("AIRCRAFT")
|
||||
.font(FlightTheme.label())
|
||||
.foregroundStyle(FlightTheme.textTertiary)
|
||||
.tracking(1)
|
||||
.padding(.top, 4)
|
||||
|
||||
aircraftCard
|
||||
}
|
||||
.padding(16)
|
||||
}
|
||||
.background(FlightTheme.background.ignoresSafeArea())
|
||||
.toolbar {
|
||||
|
||||
Reference in New Issue
Block a user