summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--ios/MullvadVPN/AppButton.swift28
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