diff --git a/RiotSwiftUI/Modules/Room/UserSuggestion/View/UserSuggestionList.swift b/RiotSwiftUI/Modules/Room/UserSuggestion/View/UserSuggestionList.swift index 9c32b892f..e509a58b3 100644 --- a/RiotSwiftUI/Modules/Room/UserSuggestion/View/UserSuggestionList.swift +++ b/RiotSwiftUI/Modules/Room/UserSuggestion/View/UserSuggestionList.swift @@ -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: View { diff --git a/changelog.d/7492.bugfix b/changelog.d/7492.bugfix new file mode 100644 index 000000000..a9ff595c9 --- /dev/null +++ b/changelog.d/7492.bugfix @@ -0,0 +1 @@ +Fix user suggestion list item height on iOS 16+