diff options
| -rw-r--r-- | ios/MullvadVPN/AppButton.swift | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/ios/MullvadVPN/AppButton.swift b/ios/MullvadVPN/AppButton.swift index f1f727b741..b98cc9c2cc 100644 --- a/ios/MullvadVPN/AppButton.swift +++ b/ios/MullvadVPN/AppButton.swift @@ -145,8 +145,28 @@ private extension UIControl.State { /// A custom `UIButton` subclass that implements additional layouts for the image @IBDesignable class CustomButton: UIButton { - var imageAlignment: ButtonImageAlignment = .leading - var inlineImageSpacing: CGFloat = 4 + var imageAlignment: ButtonImageAlignment = .leading { + didSet { + invalidateIntrinsicContentSize() + } + } + + var inlineImageSpacing: CGFloat = 4 { + didSet { + invalidateIntrinsicContentSize() + } + } + + override var intrinsicContentSize: CGSize { + var intrinsicSize = super.intrinsicContentSize + + // Add spacing between the image and title label in intrinsic size calculation + if let imageSize = currentImage?.size, imageSize.width > 0 { + intrinsicSize.width += inlineImageSpacing + } + + return intrinsicSize + } var effectiveImageAlignment: ButtonImageAlignment { switch (imageAlignment, effectiveUserInterfaceLayoutDirection) { @@ -204,7 +224,7 @@ private extension UIControl.State { : contentRect.minX case (.left, .right): - titleRect.origin.x = contentRect.origin.x + titleRect.origin.x = contentRect.minX imageRect.origin.x = titleRect.maxX + inlineImageSpacing case (.left, .leftFixed): @@ -227,7 +247,7 @@ private extension UIControl.State { case (.center, .left): titleRect.origin.x = contentRect.midX - titleRect.width * 0.5 - imageRect.origin.x = titleRect.origin.x - inlineImageSpacing - imageRect.width + imageRect.origin.x = titleRect.minX - inlineImageSpacing - imageRect.width case (.center, .right): titleRect.origin.x = contentRect.midX - titleRect.width * 0.5 |
