diff --git a/Sources/FluentUI_iOS/Components/Button/FluentButtonStyle.swift b/Sources/FluentUI_iOS/Components/Button/FluentButtonStyle.swift index 34b72a398d..6c7542f531 100644 --- a/Sources/FluentUI_iOS/Components/Button/FluentButtonStyle.swift +++ b/Sources/FluentUI_iOS/Components/Button/FluentButtonStyle.swift @@ -8,8 +8,9 @@ import UIKit /// `ButtonStyle` which configures the `Button` according to its state and design tokens. public struct FluentButtonStyle: SwiftUI.ButtonStyle { - public init(style: ButtonStyle) { + public init(style: ButtonStyle, isIconOnly: Bool = false) { self.style = style + self.isIconOnly = isIconOnly } public func makeBody(configuration: Configuration) -> some View { @@ -79,6 +80,7 @@ public struct FluentButtonStyle: SwiftUI.ButtonStyle { @Environment(\.isFocused) private var isFocused: Bool private let style: ButtonStyle + private let isIconOnly: Bool private var size: ButtonSizeCategory { switch controlSize { @@ -97,12 +99,16 @@ public struct FluentButtonStyle: SwiftUI.ButtonStyle { private var edgeInsets: EdgeInsets { let size = size let horizontalPadding = ButtonTokenSet.horizontalPadding(style: style, size: size) - let fabAlternativePadding = ButtonTokenSet.fabAlternativePadding(size) + let fabAlternativePadding = ButtonTokenSet.fabAlternativePadding(size) + + // If the button is floating and includes text, use fabAlternativePadding; otherwise, use horizontalPadding. + let trailingPadding = style.isFloating && !isIconOnly ? fabAlternativePadding : horizontalPadding + return EdgeInsets( top: .zero, leading: horizontalPadding, bottom: .zero, - trailing: style.isFloating ? fabAlternativePadding : horizontalPadding + trailing: trailingPadding ) }