Skip to content

Commit 82a03da

Browse files
committed
fix: keep review controls clear of content
Lay out the action tray outside the review scroll region and lazily render evidence rows so offscreen content is not exposed beneath native controls. Strengthen the secondary control outline for consistent visible contrast.
1 parent aa8b363 commit 82a03da

3 files changed

Lines changed: 33 additions & 32 deletions

File tree

ios/Tend/App/Theme.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ struct TendSecondaryButtonStyle: ButtonStyle {
8181
.clipShape(RoundedRectangle(cornerRadius: 14, style: .continuous))
8282
.overlay {
8383
RoundedRectangle(cornerRadius: 14, style: .continuous)
84-
.stroke(TendTheme.secondaryInk, lineWidth: 1)
84+
.strokeBorder(TendTheme.secondaryInk, lineWidth: 2)
8585
}
8686
}
8787
}

ios/Tend/Views/FeedReviewView.swift

Lines changed: 31 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -102,39 +102,40 @@ struct FeedReviewView: View {
102102
}
103103

104104
private func cardDeck(feed: MobileFeed, card: MobileCard) -> some View {
105-
ScrollView {
106-
VStack(spacing: 14) {
107-
reviewProgress(feed: feed)
108-
109-
MobileCardView(
110-
card: card,
111-
edits: $edits,
112-
openURL: openURL,
113-
openMind: {
114-
model.selectedTab = 1
115-
dismiss()
116-
}
117-
)
118-
.offset(x: 0)
119-
.simultaneousGesture(
120-
DragGesture(minimumDistance: 24)
121-
.onEnded { value in
122-
guard value.translation.width < -90,
123-
abs(value.translation.width) > abs(value.translation.height) * 1.35,
124-
card.archiveAction != nil else { return }
125-
archive(card)
105+
VStack(spacing: 0) {
106+
ScrollView {
107+
VStack(spacing: 14) {
108+
reviewProgress(feed: feed)
109+
110+
MobileCardView(
111+
card: card,
112+
edits: $edits,
113+
openURL: openURL,
114+
openMind: {
115+
model.selectedTab = 1
116+
dismiss()
126117
}
127-
)
118+
)
119+
.offset(x: 0)
120+
.simultaneousGesture(
121+
DragGesture(minimumDistance: 24)
122+
.onEnded { value in
123+
guard value.translation.width < -90,
124+
abs(value.translation.width) > abs(value.translation.height) * 1.35,
125+
card.archiveAction != nil else { return }
126+
archive(card)
127+
}
128+
)
128129

129-
Text("Swipe left to archive")
130-
.font(.caption)
131-
.foregroundStyle(TendTheme.secondaryInk)
132-
.padding(.bottom, 4)
130+
Text("Swipe left to archive")
131+
.font(.caption)
132+
.foregroundStyle(TendTheme.secondaryInk)
133+
.padding(.bottom, 4)
134+
}
135+
.padding(.horizontal, 14)
136+
.padding(.bottom, 16)
133137
}
134-
.padding(.horizontal, 14)
135-
.padding(.bottom, 124)
136-
}
137-
.safeAreaInset(edge: .bottom) {
138+
138139
ReviewActionTray(
139140
card: card,
140141
isSubmitting: model.isSubmitting,

ios/Tend/Views/MobileCardView.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ private struct MobileBlockView: View {
151151
}
152152

153153
private func itemList(icon: String) -> some View {
154-
VStack(alignment: .leading, spacing: 11) {
154+
LazyVStack(alignment: .leading, spacing: 11) {
155155
blockLabel
156156
ForEach(block.items ?? []) { item in
157157
switch item {

0 commit comments

Comments
 (0)