From a2e8076f9809efbcb66c52b17fab4ab12fdd4d75 Mon Sep 17 00:00:00 2001 From: Joe Kribs Date: Sat, 19 Apr 2025 15:07:05 -0600 Subject: [PATCH] [iOS] Replace Gear Icon with User Icon Only (#1497) * Resolves Gear showing through transparent user icons and defaults user icon to the user placeholder instead of the gear. Mirrors Jellyfin-Web's behavior. * wip --------- Co-authored-by: Ethan Pippin --- .../ViewExtensions/ViewExtensions.swift | 7 ++-- Swiftfin/Components/SettingsBarButton.swift | 41 +++++++------------ 2 files changed, 18 insertions(+), 30 deletions(-) diff --git a/Shared/Extensions/ViewExtensions/ViewExtensions.swift b/Shared/Extensions/ViewExtensions/ViewExtensions.swift index 95264bbf..9c05bfdf 100644 --- a/Shared/Extensions/ViewExtensions/ViewExtensions.swift +++ b/Shared/Extensions/ViewExtensions/ViewExtensions.swift @@ -327,9 +327,10 @@ extension View { func topBarTrailing(@ViewBuilder content: @escaping () -> some View) -> some View { toolbar { - ToolbarItemGroup(placement: .topBarTrailing) { - content() - } + ToolbarItemGroup( + placement: .topBarTrailing, + content: content + ) } } diff --git a/Swiftfin/Components/SettingsBarButton.swift b/Swiftfin/Components/SettingsBarButton.swift index 1d1828d9..45b81164 100644 --- a/Swiftfin/Components/SettingsBarButton.swift +++ b/Swiftfin/Components/SettingsBarButton.swift @@ -9,40 +9,27 @@ import Factory import SwiftUI -// Want the default navigation bar `Image(systemName:)` styling -// but using within `ImageView.placeholder/failure` ruins it. -// Need to do manual checking of image loading. struct SettingsBarButton: View { - @State - private var isUserImage = false - let server: ServerState let user: UserState let action: () -> Void var body: some View { - Button { - action() - } label: { - Image(systemName: "gearshape.fill") - .visible(!isUserImage) - .overlay { - ZStack { - Color.clear - - UserProfileImage( - userID: user.id, - source: user.profileImageSource( - client: server.client, - maxWidth: 120 - ), - pipeline: .Swiftfin.local - ) { - Color.clear - } - } - } + Button(action: action) { + AlternateLayoutView { + // Seems necessary for button layout + Image(systemName: "gearshape.fill") + } content: { + UserProfileImage( + userID: user.id, + source: user.profileImageSource( + client: server.client, + maxWidth: 120 + ), + pipeline: .Swiftfin.local + ) + } } .accessibilityLabel(L10n.settings) }