diff options
| author | Andrej Mihajlov <and@mullvad.net> | 2020-02-26 13:38:59 +0100 |
|---|---|---|
| committer | Andrej Mihajlov <and@mullvad.net> | 2020-02-26 17:19:33 +0100 |
| commit | 51bcaa93877ebfa4d93e0d1950a13638c2bc1104 (patch) | |
| tree | 5edc8a003689236ca5e398277b9a2fae8914948e | |
| parent | 8c412d321da87873dbae6f77229f10685e59ebd4 (diff) | |
| download | mullvadvpn-51bcaa93877ebfa4d93e0d1950a13638c2bc1104.tar.xz mullvadvpn-51bcaa93877ebfa4d93e0d1950a13638c2bc1104.zip | |
Add image spacing into calculation of intrinsicContentSize of CustomButton
| -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 |
