Skip to content

Commit

Permalink
[iOS] LetterPicker - Dynamic Scaling (jellyfin#1326)
Browse files Browse the repository at this point in the history
* Get the Size from Parent

* Use the Font for Sizing

* Make Static for Padding

* Using new sizing instead of a static 35
  • Loading branch information
JPKribs authored Nov 24, 2024
1 parent 994e99d commit 34d64bc
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,12 @@ extension LetterPickerBar {
private var isSelected

private let letter: ItemLetter
private let size: CGFloat
private let viewModel: FilterViewModel

init(letter: ItemLetter, viewModel: FilterViewModel) {
init(letter: ItemLetter, size: CGFloat, viewModel: FilterViewModel) {
self.letter = letter
self.size = size
self.viewModel = viewModel
}

Expand All @@ -37,15 +39,15 @@ extension LetterPickerBar {
} label: {
ZStack {
RoundedRectangle(cornerRadius: 5)
.frame(width: size, height: size)
.foregroundStyle(isSelected ? accentColor : Color.clear)

Text(letter.value)
.font(.headline)
.foregroundStyle(isSelected ? accentColor.overlayColor : accentColor)
.frame(width: size, height: size, alignment: .center)
}
.frame(width: 20, height: 20)
}
.frame(width: 50, height: 20)
}
}
}
16 changes: 15 additions & 1 deletion Swiftfin/Components/LetterPickerBar/LetterPickerBar.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ struct LetterPickerBar: View {
@ObservedObject
var viewModel: FilterViewModel

// MARK: - Body

@ViewBuilder
var body: some View {
VStack(spacing: 0) {
Expand All @@ -22,6 +24,7 @@ struct LetterPickerBar: View {
ForEach(ItemLetter.allCases, id: \.hashValue) { filterLetter in
LetterPickerButton(
letter: filterLetter,
size: LetterPickerBar.size,
viewModel: viewModel
)
.environment(\.isSelected, viewModel.currentFilters.letter.contains(filterLetter))
Expand All @@ -30,6 +33,17 @@ struct LetterPickerBar: View {
Spacer()
}
.scrollIfLargerThanContainer()
.frame(width: 30, alignment: .center)
.frame(width: LetterPickerBar.size, alignment: .center)
}

// MARK: - Letter Button Size

static var size: CGFloat {
String().height(
withConstrainedWidth: CGFloat.greatestFiniteMagnitude,
font: UIFont.preferredFont(
forTextStyle: .headline
)
)
}
}
2 changes: 1 addition & 1 deletion Swiftfin/Views/PagingLibraryView/PagingLibraryView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,7 @@ struct PagingLibraryView<Element: Poster>: View {
if letterPickerEnabled, let filterViewModel = viewModel.filterViewModel {
ZStack(alignment: letterPickerOrientation.alignment) {
innerContent
.padding(letterPickerOrientation.edge, 35)
.padding(letterPickerOrientation.edge, LetterPickerBar.size + 10)
.frame(maxWidth: .infinity)

LetterPickerBar(viewModel: filterViewModel)
Expand Down

0 comments on commit 34d64bc

Please sign in to comment.