iOS: fix mini player overlap, empty cover square, chapter nav, and UI polish
Some checks failed
CI / UI / Build (pull_request) Failing after 6s
CI / Scraper / Lint (pull_request) Failing after 9s
CI / Scraper / Test (pull_request) Failing after 8s
CI / Scraper / Build (pull_request) Has been skipped
iOS CI / Build (push) Has been cancelled
iOS CI / Test (push) Has been cancelled
iOS CI / Build (pull_request) Failing after 2s
iOS CI / Test (pull_request) Has been skipped
Some checks failed
CI / UI / Build (pull_request) Failing after 6s
CI / Scraper / Lint (pull_request) Failing after 9s
CI / Scraper / Test (pull_request) Failing after 8s
CI / Scraper / Build (pull_request) Has been skipped
iOS CI / Build (push) Has been cancelled
iOS CI / Test (push) Has been cancelled
iOS CI / Build (pull_request) Failing after 2s
iOS CI / Test (pull_request) Has been skipped
- Add safeAreaInset on ChapterReaderView ScrollView so Prev/Next buttons clear the mini player bar when audio is active - Fix mini player height reservation (66pt constant via AppLayout) - Add AsyncCoverImage(isBackground:) to suppress rounded-rect placeholder showing through blurred hero background (empty square bug) - Reduce chapter page size 100→50 on iOS - Fix ChapterRow date/chevron layout: minLength spacer + fixedSize date - Add String.strippingTrailingDate() extension; apply in MiniPlayer, FullPlayer, and ChapterReader header to clean up stale concatenated titles - Make Prev/Next buttons equal-width (maxWidth: .infinity) for easier tapping
This commit is contained in:
@@ -82,7 +82,7 @@ struct ChapterReaderView: View {
|
||||
VStack(alignment: .leading, spacing: 16) {
|
||||
// Header
|
||||
VStack(alignment: .leading, spacing: 4) {
|
||||
Text(content.chapter.title)
|
||||
Text(content.chapter.title.strippingTrailingDate())
|
||||
.font(.title2.bold())
|
||||
if !content.chapter.dateLabel.isEmpty {
|
||||
Text(content.chapter.dateLabel)
|
||||
@@ -102,18 +102,19 @@ struct ChapterReaderView: View {
|
||||
Divider()
|
||||
|
||||
// Prev / Next navigation
|
||||
HStack {
|
||||
HStack(spacing: 12) {
|
||||
if let prev = content.prev {
|
||||
NavigationLink(value: NavDestination.chapter(slug, prev)) {
|
||||
Label("Ch.\(prev)", systemImage: "chevron.left")
|
||||
.frame(maxWidth: .infinity)
|
||||
}
|
||||
.buttonStyle(.bordered)
|
||||
}
|
||||
Spacer()
|
||||
if let next = content.next {
|
||||
NavigationLink(value: NavDestination.chapter(slug, next)) {
|
||||
Label("Ch.\(next)", systemImage: "chevron.right")
|
||||
.labelStyle(ReverseLabelStyle())
|
||||
.frame(maxWidth: .infinity)
|
||||
}
|
||||
.buttonStyle(.borderedProminent)
|
||||
.tint(.amber)
|
||||
@@ -123,6 +124,12 @@ struct ChapterReaderView: View {
|
||||
}
|
||||
.padding(.vertical)
|
||||
}
|
||||
// Ensure the Prev/Next buttons clear the mini-player bar when it is visible.
|
||||
.safeAreaInset(edge: .bottom) {
|
||||
if audioPlayer.isActive {
|
||||
Color.clear.frame(height: AppLayout.miniPlayerBarHeight)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Audio toolbar button
|
||||
|
||||
Reference in New Issue
Block a user