Fix user suggestion list item height on iOS 16+

This commit is contained in:
aringenbach 2023-04-13 17:40:58 +02:00
parent c1a9f31ded
commit 3c973921fa
2 changed files with 32 additions and 2 deletions

View file

@ -23,6 +23,15 @@ struct UserSuggestionList: View {
static let lineSpacing: CGFloat = 10.0
static let maxHeight: CGFloat = 300.0
static let maxVisibleRows = 4
/*
As of iOS 16.0, SwiftUI's List uses `UICollectionView` instead
of `UITableView` internally, this value is an adjustment to apply
to the list items in order to be as close as possible as the
`UITableView` display.
*/
@available (iOS 16.0, *)
static let collectionViewPaddingCorrection: CGFloat = -5.0
}
// MARK: - Properties
@ -72,8 +81,7 @@ struct UserSuggestionList: View {
displayName: item.displayName,
userId: item.id
)
.padding(.bottom, Constants.listItemPadding)
.padding(.top, viewModel.viewState.items.first?.id == item.id ? Constants.listItemPadding + Constants.topPadding : Constants.listItemPadding)
.modifier(ListItemPaddingModifier(isFirst: viewModel.viewState.items.first?.id == item.id))
}
}
.listStyle(PlainListStyle())
@ -82,6 +90,27 @@ struct UserSuggestionList: View {
contentHeightForRowCount(viewModel.viewState.items.count))))
.id(UUID()) // Rebuild the whole list on item changes. Fixes performance issues.
}
private struct ListItemPaddingModifier: ViewModifier {
private let isFirst: Bool
init(isFirst: Bool) {
self.isFirst = isFirst
}
func body(content: Content) -> some View {
var topPadding: CGFloat = isFirst ? Constants.listItemPadding + Constants.topPadding : Constants.listItemPadding
var bottomPadding: CGFloat = Constants.listItemPadding
if #available(iOS 16.0, *) {
topPadding += Constants.collectionViewPaddingCorrection
bottomPadding += Constants.collectionViewPaddingCorrection
}
return content
.padding(.top, topPadding)
.padding(.bottom, bottomPadding)
}
}
}
private struct BackgroundView<Content: View>: View {

1
changelog.d/7492.bugfix Normal file
View file

@ -0,0 +1 @@
Fix user suggestion list item height on iOS 16+