From 7882b8608c50cda81ff341ab633ffca4c089080d Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Fri, 17 Jan 2020 15:53:56 +1100 Subject: [PATCH] Fix layout on small screens --- Signal.xcodeproj/project.pbxproj | 4 ++++ Signal/src/Loki/Components/TextField.swift | 4 ++-- Signal/src/Loki/Style Guide/Values.swift | 16 +++++++------- .../src/Loki/Utilities/DeviceUtilities.swift | 4 ++++ Signal/src/Loki/Utilities/QRCode.swift | 6 ++--- .../View Controllers/DeviceLinkingModal.swift | 2 +- .../Loki/View Controllers/DisplayNameVC.swift | 16 +++++++------- .../src/Loki/View Controllers/LandingVC.swift | 8 +++---- .../Loki/View Controllers/LinkDeviceVC.swift | 10 ++++----- .../src/Loki/View Controllers/QRCodeVC.swift | 10 ++++----- .../Loki/View Controllers/RegisterVC.swift | 10 ++++----- .../src/Loki/View Controllers/RestoreVC.swift | 22 +++++++++---------- .../src/Loki/View Controllers/SeedVCV2.swift | 8 +++---- .../Loki/View Controllers/SettingsVC.swift | 2 +- 14 files changed, 65 insertions(+), 57 deletions(-) create mode 100644 Signal/src/Loki/Utilities/DeviceUtilities.swift diff --git a/Signal.xcodeproj/project.pbxproj b/Signal.xcodeproj/project.pbxproj index bb34355ff..0df1a9f60 100644 --- a/Signal.xcodeproj/project.pbxproj +++ b/Signal.xcodeproj/project.pbxproj @@ -578,6 +578,7 @@ B85357C323A1BD1200AAF6CD /* SeedVCV2.swift in Sources */ = {isa = PBXBuildFile; fileRef = B85357C223A1BD1200AAF6CD /* SeedVCV2.swift */; }; B85357C523A1F13800AAF6CD /* LinkDeviceVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B85357C423A1F13800AAF6CD /* LinkDeviceVC.swift */; }; B85357C723A1FB5100AAF6CD /* LinkDeviceVCDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B85357C623A1FB5100AAF6CD /* LinkDeviceVCDelegate.swift */; }; + B8544E3123D16CA500299F14 /* DeviceUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8544E3023D16CA500299F14 /* DeviceUtilities.swift */; }; B86BD08423399ACF000F5AE3 /* Modal.swift in Sources */ = {isa = PBXBuildFile; fileRef = B86BD08323399ACF000F5AE3 /* Modal.swift */; }; B86BD08623399CEF000F5AE3 /* SeedModal.swift in Sources */ = {isa = PBXBuildFile; fileRef = B86BD08523399CEF000F5AE3 /* SeedModal.swift */; }; B885D5F4233491AB00EE0D8E /* DeviceLinkingModal.swift in Sources */ = {isa = PBXBuildFile; fileRef = B885D5F3233491AB00EE0D8E /* DeviceLinkingModal.swift */; }; @@ -1417,6 +1418,7 @@ B85357C223A1BD1200AAF6CD /* SeedVCV2.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeedVCV2.swift; sourceTree = ""; }; B85357C423A1F13800AAF6CD /* LinkDeviceVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LinkDeviceVC.swift; sourceTree = ""; }; B85357C623A1FB5100AAF6CD /* LinkDeviceVCDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LinkDeviceVCDelegate.swift; sourceTree = ""; }; + B8544E3023D16CA500299F14 /* DeviceUtilities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceUtilities.swift; sourceTree = ""; }; B86BD08323399ACF000F5AE3 /* Modal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Modal.swift; sourceTree = ""; }; B86BD08523399CEF000F5AE3 /* SeedModal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeedModal.swift; sourceTree = ""; }; B885D5F3233491AB00EE0D8E /* DeviceLinkingModal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceLinkingModal.swift; sourceTree = ""; }; @@ -2776,6 +2778,7 @@ B8CCF63C239757DB0091D419 /* Utilities */ = { isa = PBXGroup; children = ( + B8544E3023D16CA500299F14 /* DeviceUtilities.swift */, B84664F4235022F30083A1CD /* MentionUtilities.swift */, B885D5F52334A32100EE0D8E /* UIView+Constraints.swift */, B886B4A82398BA1500211ABE /* QRCode.swift */, @@ -3947,6 +3950,7 @@ 34B3F8801E8DF1700035BE1A /* InviteFlow.swift in Sources */, B85357C523A1F13800AAF6CD /* LinkDeviceVC.swift in Sources */, 457C87B82032645C008D52D6 /* DebugUINotifications.swift in Sources */, + B8544E3123D16CA500299F14 /* DeviceUtilities.swift in Sources */, 4C21D5D8223AC60F00EF8A77 /* PhotoCapture.swift in Sources */, 4C13C9F620E57BA30089A98B /* ColorPickerViewController.swift in Sources */, B8162F0522892C5F00D46544 /* FriendRequestViewDelegate.swift in Sources */, diff --git a/Signal/src/Loki/Components/TextField.swift b/Signal/src/Loki/Components/TextField.swift index 64e3ad518..9bedb2e56 100644 --- a/Signal/src/Loki/Components/TextField.swift +++ b/Signal/src/Loki/Components/TextField.swift @@ -36,7 +36,7 @@ final class TextField : UITextField { override func textRect(forBounds bounds: CGRect) -> CGRect { if usesDefaultHeight { - return bounds.insetBy(dx: Values.largeSpacing, dy: Values.largeSpacing) + return bounds.insetBy(dx: isSmallScreen ? Values.mediumSpacing : Values.largeSpacing, dy: isSmallScreen ? Values.smallSpacing : Values.largeSpacing) } else { return bounds.insetBy(dx: Values.mediumSpacing, dy: Values.smallSpacing) } @@ -44,7 +44,7 @@ final class TextField : UITextField { override func editingRect(forBounds bounds: CGRect) -> CGRect { if usesDefaultHeight { - return bounds.insetBy(dx: Values.largeSpacing, dy: Values.largeSpacing) + return bounds.insetBy(dx: isSmallScreen ? Values.mediumSpacing : Values.largeSpacing, dy: isSmallScreen ? Values.smallSpacing : Values.largeSpacing) } else { return bounds.insetBy(dx: Values.mediumSpacing, dy: Values.smallSpacing) } diff --git a/Signal/src/Loki/Style Guide/Values.swift b/Signal/src/Loki/Style Guide/Values.swift index b19256c81..c1dca9530 100644 --- a/Signal/src/Loki/Style Guide/Values.swift +++ b/Signal/src/Loki/Style Guide/Values.swift @@ -19,9 +19,9 @@ final class Values : NSObject { @objc static let massiveFontSize = CGFloat(50) // MARK: - Element Sizes - @objc static let smallButtonHeight = CGFloat(27) - @objc static let mediumButtonHeight = CGFloat(34) - @objc static let largeButtonHeight = CGFloat(45) + @objc static let smallButtonHeight = isSmallScreen ? CGFloat(24) : CGFloat(27) + @objc static let mediumButtonHeight = isSmallScreen ? CGFloat(30) : CGFloat(34) + @objc static let largeButtonHeight = isSmallScreen ? CGFloat(40) : CGFloat(45) @objc static let accentLineThickness = CGFloat(4) @objc static let verySmallProfilePictureSize = CGFloat(26) @objc static let smallProfilePictureSize = CGFloat(35) @@ -31,18 +31,18 @@ final class Values : NSObject { @objc static let conversationCellStatusIndicatorSize = CGFloat(14) @objc static let searchBarHeight = CGFloat(36) @objc static let newConversationButtonSize = CGFloat(45) - @objc static let textFieldHeight = CGFloat(80) + @objc static let textFieldHeight = isSmallScreen ? CGFloat(48) : CGFloat(80) @objc static let textFieldCornerRadius = CGFloat(8) @objc static let separatorLabelHeight = CGFloat(24) @objc static var separatorThickness: CGFloat { return 1 / UIScreen.main.scale } - @objc static let tabBarHeight = CGFloat(48) - @objc static let settingButtonHeight = CGFloat(75) + @objc static let tabBarHeight = isSmallScreen ? CGFloat(32) : CGFloat(48) + @objc static let settingButtonHeight = isSmallScreen ? CGFloat(52) : CGFloat(75) @objc static let modalCornerRadius = CGFloat(10) @objc static let modalButtonCornerRadius = CGFloat(5) @objc static let fakeChatBubbleWidth = CGFloat(224) @objc static let fakeChatBubbleCornerRadius = CGFloat(10) @objc static let fakeChatViewHeight = CGFloat(234) - @objc static var composeViewTextFieldBorderThickness: CGFloat { return 1 / UIScreen.main.scale } + @objc static let composeViewTextFieldBorderThickness = 1 / UIScreen.main.scale @objc static let messageBubbleCornerRadius: CGFloat = 10 @objc static let progressBarThickness: CGFloat = 2 @@ -54,7 +54,7 @@ final class Values : NSObject { @objc static let veryLargeSpacing = CGFloat(35) @objc static let massiveSpacing = CGFloat(64) @objc static let newConversationButtonBottomOffset = CGFloat(52) - @objc static let onboardingButtonBottomOffset = CGFloat(72) + @objc static let onboardingButtonBottomOffset = isSmallScreen ? CGFloat(52) : CGFloat(72) // MARK: - Animation Values @objc static let fakeChatStartDelay: TimeInterval = 2 diff --git a/Signal/src/Loki/Utilities/DeviceUtilities.swift b/Signal/src/Loki/Utilities/DeviceUtilities.swift new file mode 100644 index 000000000..d011c2541 --- /dev/null +++ b/Signal/src/Loki/Utilities/DeviceUtilities.swift @@ -0,0 +1,4 @@ + +var isSmallScreen: Bool { + return (UIScreen.main.bounds.height - 568) < 1 +} diff --git a/Signal/src/Loki/Utilities/QRCode.swift b/Signal/src/Loki/Utilities/QRCode.swift index 8767e22a8..4d64f84c4 100644 --- a/Signal/src/Loki/Utilities/QRCode.swift +++ b/Signal/src/Loki/Utilities/QRCode.swift @@ -1,7 +1,7 @@ enum QRCode { - static func generate(for string: String, hasBackground: Bool = false) -> UIImage { + static func generate(for string: String, isInverted: Bool = false, hasBackground: Bool = false) -> UIImage { let data = string.data(using: .utf8) var qrCodeAsCIImage: CIImage let filter1 = CIFilter(name: "CIQRCodeGenerator")! @@ -10,8 +10,8 @@ enum QRCode { if hasBackground { let filter2 = CIFilter(name: "CIFalseColor")! filter2.setValue(qrCodeAsCIImage, forKey: "inputImage") - filter2.setValue(CIColor(color: UIColor(hex: 0xFFFFFF)), forKey: "inputColor0") - filter2.setValue(CIColor(color: UIColor(hex: 0x1B1B1B)), forKey: "inputColor1") + filter2.setValue(CIColor(color: UIColor(hex: isInverted ? 0xFFFFFF : 0x000000)), forKey: "inputColor0") + filter2.setValue(CIColor(color: UIColor(hex: isInverted ? 0x1B1B1B : 0xFFFFFF)), forKey: "inputColor1") qrCodeAsCIImage = filter2.outputImage! } else { let filter2 = CIFilter(name: "CIColorInvert")! diff --git a/Signal/src/Loki/View Controllers/DeviceLinkingModal.swift b/Signal/src/Loki/View Controllers/DeviceLinkingModal.swift index 94a0b0c41..7ce3866b3 100644 --- a/Signal/src/Loki/View Controllers/DeviceLinkingModal.swift +++ b/Signal/src/Loki/View Controllers/DeviceLinkingModal.swift @@ -107,7 +107,7 @@ final class DeviceLinkingModal : Modal, DeviceLinkingSessionDelegate { case .master: qrCodeImageView.set(.height, to: 128) let hexEncodedPublicKey = OWSIdentityManager.shared().identityKeyPair()!.hexEncodedPublicKey - qrCodeImageView.image = QRCode.generate(for: hexEncodedPublicKey) + qrCodeImageView.image = QRCode.generate(for: hexEncodedPublicKey, hasBackground: true) case .slave: spinner.set(.height, to: 64) spinner.startAnimating() diff --git a/Signal/src/Loki/View Controllers/DisplayNameVC.swift b/Signal/src/Loki/View Controllers/DisplayNameVC.swift index cf252dc85..180ae0301 100644 --- a/Signal/src/Loki/View Controllers/DisplayNameVC.swift +++ b/Signal/src/Loki/View Controllers/DisplayNameVC.swift @@ -37,7 +37,7 @@ final class DisplayNameVC : UIViewController { // Set up title label let titleLabel = UILabel() titleLabel.textColor = Colors.text - titleLabel.font = .boldSystemFont(ofSize: Values.veryLargeFontSize) + titleLabel.font = .boldSystemFont(ofSize: isSmallScreen ? Values.largeFontSize : Values.veryLargeFontSize) titleLabel.text = NSLocalizedString("Pick your display name", comment: "") titleLabel.numberOfLines = 0 titleLabel.lineBreakMode = .byWordWrapping @@ -51,9 +51,9 @@ final class DisplayNameVC : UIViewController { // Set up spacers let topSpacer = UIView.vStretchingSpacer() let spacer1 = UIView() - spacer1HeightConstraint = spacer1.set(.height, to: Values.veryLargeSpacing) + spacer1HeightConstraint = spacer1.set(.height, to: isSmallScreen ? Values.smallSpacing : Values.veryLargeSpacing) let spacer2 = UIView() - spacer2HeightConstraint = spacer2.set(.height, to: Values.veryLargeSpacing) + spacer2HeightConstraint = spacer2.set(.height, to: isSmallScreen ? Values.smallSpacing : Values.veryLargeSpacing) let bottomSpacer = UIView.vStretchingSpacer() let registerButtonBottomOffsetSpacer = UIView() registerButtonBottomOffsetConstraint = registerButtonBottomOffsetSpacer.set(.height, to: Values.onboardingButtonBottomOffset) @@ -117,9 +117,9 @@ final class DisplayNameVC : UIViewController { @objc private func handleKeyboardWillChangeFrameNotification(_ notification: Notification) { guard let newHeight = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue.size.height else { return } bottomConstraint.constant = -newHeight // Negative due to how the constraint is set up - registerButtonBottomOffsetConstraint.constant = Values.largeSpacing - spacer1HeightConstraint.constant = Values.mediumSpacing - spacer2HeightConstraint.constant = Values.mediumSpacing + registerButtonBottomOffsetConstraint.constant = isSmallScreen ? Values.smallSpacing : Values.largeSpacing + spacer1HeightConstraint.constant = isSmallScreen ? Values.smallSpacing : Values.mediumSpacing + spacer2HeightConstraint.constant = isSmallScreen ? Values.smallSpacing : Values.mediumSpacing UIView.animate(withDuration: 0.25) { self.view.layoutIfNeeded() } @@ -128,8 +128,8 @@ final class DisplayNameVC : UIViewController { @objc private func handleKeyboardWillHideNotification(_ notification: Notification) { bottomConstraint.constant = 0 registerButtonBottomOffsetConstraint.constant = Values.onboardingButtonBottomOffset - spacer1HeightConstraint.constant = Values.veryLargeSpacing - spacer2HeightConstraint.constant = Values.veryLargeSpacing + spacer1HeightConstraint.constant = isSmallScreen ? Values.smallSpacing : Values.veryLargeSpacing + spacer2HeightConstraint.constant = isSmallScreen ? Values.smallSpacing : Values.veryLargeSpacing UIView.animate(withDuration: 0.25) { self.view.layoutIfNeeded() } diff --git a/Signal/src/Loki/View Controllers/LandingVC.swift b/Signal/src/Loki/View Controllers/LandingVC.swift index aa3d26c47..1b1ad0b91 100644 --- a/Signal/src/Loki/View Controllers/LandingVC.swift +++ b/Signal/src/Loki/View Controllers/LandingVC.swift @@ -58,7 +58,7 @@ final class LandingVC : UIViewController, LinkDeviceVCDelegate, DeviceLinkingMod // Set up title label let titleLabel = UILabel() titleLabel.textColor = Colors.text - titleLabel.font = .boldSystemFont(ofSize: Values.veryLargeFontSize) + titleLabel.font = .boldSystemFont(ofSize: isSmallScreen ? Values.largeFontSize : Values.veryLargeFontSize) titleLabel.text = NSLocalizedString("Your Session begins here...", comment: "") titleLabel.numberOfLines = 0 titleLabel.lineBreakMode = .byWordWrapping @@ -79,11 +79,11 @@ final class LandingVC : UIViewController, LinkDeviceVCDelegate, DeviceLinkingMod linkButton.pin(.leading, to: .leading, of: linkButtonContainer, withInset: Values.massiveSpacing) linkButton.pin(.top, to: .top, of: linkButtonContainer) linkButtonContainer.pin(.trailing, to: .trailing, of: linkButton, withInset: Values.massiveSpacing) - linkButtonContainer.pin(.bottom, to: .bottom, of: linkButton, withInset: 10) + linkButtonContainer.pin(.bottom, to: .bottom, of: linkButton, withInset: isSmallScreen ? 6 : 10) // Set up button stack view let buttonStackView = UIStackView(arrangedSubviews: [ registerButton, restoreButton ]) buttonStackView.axis = .vertical - buttonStackView.spacing = Values.mediumSpacing + buttonStackView.spacing = isSmallScreen ? Values.smallSpacing : Values.mediumSpacing buttonStackView.alignment = .fill // Set up button stack view container let buttonStackViewContainer = UIView() @@ -93,7 +93,7 @@ final class LandingVC : UIViewController, LinkDeviceVCDelegate, DeviceLinkingMod buttonStackViewContainer.pin(.trailing, to: .trailing, of: buttonStackView, withInset: Values.massiveSpacing) buttonStackViewContainer.pin(.bottom, to: .bottom, of: buttonStackView) // Set up main stack view - let mainStackView = UIStackView(arrangedSubviews: [ topSpacer, titleLabelContainer, UIView.spacer(withHeight: Values.mediumSpacing), fakeChatView, bottomSpacer, buttonStackViewContainer, linkButtonContainer ]) + let mainStackView = UIStackView(arrangedSubviews: [ topSpacer, titleLabelContainer, UIView.spacer(withHeight: isSmallScreen ? Values.smallSpacing : Values.mediumSpacing), fakeChatView, bottomSpacer, buttonStackViewContainer, linkButtonContainer ]) mainStackView.axis = .vertical mainStackView.alignment = .fill view.addSubview(mainStackView) diff --git a/Signal/src/Loki/View Controllers/LinkDeviceVC.swift b/Signal/src/Loki/View Controllers/LinkDeviceVC.swift index e5197914d..8766d634f 100644 --- a/Signal/src/Loki/View Controllers/LinkDeviceVC.swift +++ b/Signal/src/Loki/View Controllers/LinkDeviceVC.swift @@ -148,7 +148,7 @@ private final class EnterPublicKeyVC : UIViewController { // Set up title label let titleLabel = UILabel() titleLabel.textColor = Colors.text - titleLabel.font = .boldSystemFont(ofSize: Values.veryLargeFontSize) + titleLabel.font = .boldSystemFont(ofSize: isSmallScreen ? Values.largeFontSize : Values.veryLargeFontSize) titleLabel.text = NSLocalizedString("Link your device", comment: "") titleLabel.numberOfLines = 0 titleLabel.lineBreakMode = .byWordWrapping @@ -165,14 +165,14 @@ private final class EnterPublicKeyVC : UIViewController { linkButton.addTarget(self, action: #selector(requestDeviceLink), for: UIControl.Event.touchUpInside) let linkButtonContainer = UIView() linkButtonContainer.addSubview(linkButton) - linkButton.pin(.leading, to: .leading, of: linkButtonContainer, withInset: 80) + linkButton.pin(.leading, to: .leading, of: linkButtonContainer, withInset: isSmallScreen ? 48 : 80) linkButton.pin(.top, to: .top, of: linkButtonContainer) - linkButtonContainer.pin(.trailing, to: .trailing, of: linkButton, withInset: 80) + linkButtonContainer.pin(.trailing, to: .trailing, of: linkButton, withInset: isSmallScreen ? 48 : 80) linkButtonBottomConstraint = linkButtonContainer.pin(.bottom, to: .bottom, of: linkButton, withInset: Values.veryLargeSpacing) // Set up top stack view let topStackView = UIStackView(arrangedSubviews: [ titleLabel, explanationLabel, publicKeyTextField ]) topStackView.axis = .vertical - topStackView.spacing = Values.largeSpacing + topStackView.spacing = isSmallScreen ? Values.smallSpacing : Values.largeSpacing // Set up spacers let topSpacer = UIView.vStretchingSpacer() let bottomSpacer = UIView.vStretchingSpacer() @@ -216,7 +216,7 @@ private final class EnterPublicKeyVC : UIViewController { @objc private func handleKeyboardWillChangeFrameNotification(_ notification: Notification) { guard let newHeight = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue.size.height else { return } bottomConstraint.constant = -newHeight - linkButtonBottomConstraint.constant = Values.mediumSpacing + linkButtonBottomConstraint.constant = isSmallScreen ? Values.smallSpacing : Values.mediumSpacing UIView.animate(withDuration: 0.25) { self.view.layoutIfNeeded() } diff --git a/Signal/src/Loki/View Controllers/QRCodeVC.swift b/Signal/src/Loki/View Controllers/QRCodeVC.swift index f61820f71..f359ecf02 100644 --- a/Signal/src/Loki/View Controllers/QRCodeVC.swift +++ b/Signal/src/Loki/View Controllers/QRCodeVC.swift @@ -160,18 +160,18 @@ private final class ViewMyQRCodeVC : UIViewController { // Set up title label let titleLabel = UILabel() titleLabel.textColor = Colors.text - titleLabel.font = .boldSystemFont(ofSize: Values.massiveFontSize) + titleLabel.font = .boldSystemFont(ofSize: isSmallScreen ? CGFloat(40) : Values.massiveFontSize) titleLabel.text = NSLocalizedString("Scan Me", comment: "") titleLabel.numberOfLines = 0 titleLabel.textAlignment = .center titleLabel.lineBreakMode = .byWordWrapping // Set up QR code image view let qrCodeImageView = UIImageView() - let qrCode = QRCode.generate(for: userHexEncodedPublicKey) + let qrCode = QRCode.generate(for: userHexEncodedPublicKey, hasBackground: true) qrCodeImageView.image = qrCode qrCodeImageView.contentMode = .scaleAspectFit - qrCodeImageView.set(.height, to: 240) - qrCodeImageView.set(.width, to: 240) + qrCodeImageView.set(.height, to: isSmallScreen ? 180 : 240) + qrCodeImageView.set(.width, to: isSmallScreen ? 180 : 240) // Set up QR code image view container let qrCodeImageViewContainer = UIView() qrCodeImageViewContainer.addSubview(qrCodeImageView) @@ -203,7 +203,7 @@ private final class ViewMyQRCodeVC : UIViewController { // Set up stack view let stackView = UIStackView(arrangedSubviews: [ titleLabel, qrCodeImageViewContainer, explanationLabel, shareButtonContainer, UIView.vStretchingSpacer() ]) stackView.axis = .vertical - stackView.spacing = Values.largeSpacing + stackView.spacing = isSmallScreen ? Values.mediumSpacing : Values.largeSpacing stackView.alignment = .fill stackView.layoutMargins = UIEdgeInsets(top: Values.mediumSpacing, left: Values.largeSpacing, bottom: Values.mediumSpacing, right: Values.largeSpacing) stackView.isLayoutMarginsRelativeArrangement = true diff --git a/Signal/src/Loki/View Controllers/RegisterVC.swift b/Signal/src/Loki/View Controllers/RegisterVC.swift index 6c465c372..4ed17dbe9 100644 --- a/Signal/src/Loki/View Controllers/RegisterVC.swift +++ b/Signal/src/Loki/View Controllers/RegisterVC.swift @@ -7,7 +7,7 @@ final class RegisterVC : UIViewController { private lazy var publicKeyLabel: UILabel = { let result = UILabel() result.textColor = Colors.text - result.font = Fonts.spaceMono(ofSize: Values.largeFontSize) + result.font = Fonts.spaceMono(ofSize: isSmallScreen ? Values.mediumFontSize : Values.largeFontSize) result.numberOfLines = 0 result.lineBreakMode = .byCharWrapping return result @@ -60,7 +60,7 @@ final class RegisterVC : UIViewController { // Set up title label let titleLabel = UILabel() titleLabel.textColor = Colors.text - titleLabel.font = .boldSystemFont(ofSize: Values.veryLargeFontSize) + titleLabel.font = .boldSystemFont(ofSize: isSmallScreen ? Values.largeFontSize : Values.veryLargeFontSize) titleLabel.text = NSLocalizedString("Say hello to your Session ID", comment: "") titleLabel.numberOfLines = 0 titleLabel.lineBreakMode = .byWordWrapping @@ -89,7 +89,7 @@ final class RegisterVC : UIViewController { // Set up button stack view let buttonStackView = UIStackView(arrangedSubviews: [ registerButton, copyPublicKeyButton ]) buttonStackView.axis = .vertical - buttonStackView.spacing = Values.mediumSpacing + buttonStackView.spacing = isSmallScreen ? Values.smallSpacing : Values.mediumSpacing buttonStackView.alignment = .fill // Set up button stack view container let buttonStackViewContainer = UIView() @@ -109,11 +109,11 @@ final class RegisterVC : UIViewController { legalLabel.pin(.leading, to: .leading, of: legalLabelContainer, withInset: Values.massiveSpacing) legalLabel.pin(.top, to: .top, of: legalLabelContainer) legalLabelContainer.pin(.trailing, to: .trailing, of: legalLabel, withInset: Values.massiveSpacing) - legalLabelContainer.pin(.bottom, to: .bottom, of: legalLabel, withInset: 10) + legalLabelContainer.pin(.bottom, to: .bottom, of: legalLabel, withInset: isSmallScreen ? 6 : 10) // Set up top stack view let topStackView = UIStackView(arrangedSubviews: [ titleLabel, explanationLabel, publicKeyLabelContainer ]) topStackView.axis = .vertical - topStackView.spacing = Values.veryLargeSpacing + topStackView.spacing = isSmallScreen ? Values.smallSpacing : Values.veryLargeSpacing topStackView.alignment = .fill // Set up top stack view container let topStackViewContainer = UIView() diff --git a/Signal/src/Loki/View Controllers/RestoreVC.swift b/Signal/src/Loki/View Controllers/RestoreVC.swift index 0fd183818..faf45a5b3 100644 --- a/Signal/src/Loki/View Controllers/RestoreVC.swift +++ b/Signal/src/Loki/View Controllers/RestoreVC.swift @@ -53,7 +53,7 @@ final class RestoreVC : UIViewController { // Set up title label let titleLabel = UILabel() titleLabel.textColor = Colors.text - titleLabel.font = .boldSystemFont(ofSize: Values.veryLargeFontSize) + titleLabel.font = .boldSystemFont(ofSize: isSmallScreen ? Values.largeFontSize : Values.veryLargeFontSize) titleLabel.text = NSLocalizedString("Restore your account", comment: "") titleLabel.numberOfLines = 0 titleLabel.lineBreakMode = .byWordWrapping @@ -71,11 +71,11 @@ final class RestoreVC : UIViewController { // Set up spacers let topSpacer = UIView.vStretchingSpacer() let spacer1 = UIView() - spacer1HeightConstraint = spacer1.set(.height, to: Values.veryLargeSpacing) + spacer1HeightConstraint = spacer1.set(.height, to: isSmallScreen ? Values.smallSpacing : Values.veryLargeSpacing) let spacer2 = UIView() - spacer2HeightConstraint = spacer2.set(.height, to: Values.veryLargeSpacing) + spacer2HeightConstraint = spacer2.set(.height, to: isSmallScreen ? Values.smallSpacing : Values.veryLargeSpacing) let spacer3 = UIView() - spacer3HeightConstraint = spacer3.set(.height, to: Values.veryLargeSpacing) + spacer3HeightConstraint = spacer3.set(.height, to: isSmallScreen ? Values.smallSpacing : Values.veryLargeSpacing) let bottomSpacer = UIView.vStretchingSpacer() let restoreButtonBottomOffsetSpacer = UIView() restoreButtonBottomOffsetConstraint = restoreButtonBottomOffsetSpacer.set(.height, to: Values.onboardingButtonBottomOffset) @@ -139,10 +139,10 @@ final class RestoreVC : UIViewController { @objc private func handleKeyboardWillChangeFrameNotification(_ notification: Notification) { guard let newHeight = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue.size.height else { return } bottomConstraint.constant = -newHeight // Negative due to how the constraint is set up - restoreButtonBottomOffsetConstraint.constant = Values.largeSpacing - spacer1HeightConstraint.constant = Values.mediumSpacing - spacer2HeightConstraint.constant = Values.mediumSpacing - spacer3HeightConstraint.constant = Values.mediumSpacing + restoreButtonBottomOffsetConstraint.constant = isSmallScreen ? Values.smallSpacing : Values.largeSpacing + spacer1HeightConstraint.constant = isSmallScreen ? Values.smallSpacing : Values.mediumSpacing + spacer2HeightConstraint.constant = isSmallScreen ? Values.smallSpacing : Values.mediumSpacing + spacer3HeightConstraint.constant = isSmallScreen ? Values.smallSpacing : Values.mediumSpacing UIView.animate(withDuration: 0.25) { self.view.layoutIfNeeded() } @@ -151,9 +151,9 @@ final class RestoreVC : UIViewController { @objc private func handleKeyboardWillHideNotification(_ notification: Notification) { bottomConstraint.constant = 0 restoreButtonBottomOffsetConstraint.constant = Values.onboardingButtonBottomOffset - spacer1HeightConstraint.constant = Values.veryLargeSpacing - spacer2HeightConstraint.constant = Values.veryLargeSpacing - spacer3HeightConstraint.constant = Values.veryLargeSpacing + spacer1HeightConstraint.constant = isSmallScreen ? Values.smallSpacing : Values.veryLargeSpacing + spacer2HeightConstraint.constant = isSmallScreen ? Values.smallSpacing : Values.veryLargeSpacing + spacer3HeightConstraint.constant = isSmallScreen ? Values.smallSpacing : Values.veryLargeSpacing UIView.animate(withDuration: 0.25) { self.view.layoutIfNeeded() } diff --git a/Signal/src/Loki/View Controllers/SeedVCV2.swift b/Signal/src/Loki/View Controllers/SeedVCV2.swift index dda51fead..81e72d21b 100644 --- a/Signal/src/Loki/View Controllers/SeedVCV2.swift +++ b/Signal/src/Loki/View Controllers/SeedVCV2.swift @@ -80,7 +80,7 @@ final class SeedVCV2 : UIViewController { // Set up title label let titleLabel = UILabel() titleLabel.textColor = Colors.text - titleLabel.font = .boldSystemFont(ofSize: Values.veryLargeFontSize) + titleLabel.font = .boldSystemFont(ofSize: isSmallScreen ? Values.largeFontSize : Values.veryLargeFontSize) titleLabel.text = NSLocalizedString("Meet your recovery phrase", comment: "") titleLabel.numberOfLines = 0 titleLabel.lineBreakMode = .byWordWrapping @@ -107,7 +107,7 @@ final class SeedVCV2 : UIViewController { // Set up call to action label let callToActionLabel = UILabel() callToActionLabel.textColor = Colors.text.withAlphaComponent(Values.unimportantElementOpacity) - callToActionLabel.font = .systemFont(ofSize: Values.mediumFontSize) + callToActionLabel.font = .systemFont(ofSize: isSmallScreen ? Values.smallFontSize : Values.mediumFontSize) callToActionLabel.text = NSLocalizedString("Hold to reveal", comment: "") callToActionLabel.textAlignment = .center let callToActionLabelGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(revealMnemonic)) @@ -127,7 +127,7 @@ final class SeedVCV2 : UIViewController { // Set up top stack view let topStackView = UIStackView(arrangedSubviews: [ titleLabel, explanationLabel, mnemonicLabelContainer, callToActionLabel ]) topStackView.axis = .vertical - topStackView.spacing = Values.largeSpacing + topStackView.spacing = isSmallScreen ? Values.smallSpacing : Values.largeSpacing topStackView.alignment = .fill // Set up top stack view container let topStackViewContainer = UIView() @@ -145,7 +145,7 @@ final class SeedVCV2 : UIViewController { let mainStackView = UIStackView(arrangedSubviews: [ topSpacer, topStackViewContainer, bottomSpacer, copyButtonContainer ]) mainStackView.axis = .vertical mainStackView.alignment = .fill - mainStackView.layoutMargins = UIEdgeInsets(top: 0, leading: 0, bottom: Values.mediumSpacing, trailing: 0) + mainStackView.layoutMargins = UIEdgeInsets(top: 0, leading: 0, bottom: isSmallScreen ? Values.smallSpacing : Values.mediumSpacing, trailing: 0) mainStackView.isLayoutMarginsRelativeArrangement = true view.addSubview(mainStackView) mainStackView.pin(.leading, to: .leading, of: view) diff --git a/Signal/src/Loki/View Controllers/SettingsVC.swift b/Signal/src/Loki/View Controllers/SettingsVC.swift index c5acf9277..46c2d6736 100644 --- a/Signal/src/Loki/View Controllers/SettingsVC.swift +++ b/Signal/src/Loki/View Controllers/SettingsVC.swift @@ -103,7 +103,7 @@ final class SettingsVC : UIViewController, AvatarViewHelperDelegate { // Set up public key label let publicKeyLabel = UILabel() publicKeyLabel.textColor = Colors.text - publicKeyLabel.font = Fonts.spaceMono(ofSize: Values.largeFontSize) + publicKeyLabel.font = Fonts.spaceMono(ofSize: isSmallScreen ? Values.mediumFontSize : Values.largeFontSize) publicKeyLabel.numberOfLines = 0 publicKeyLabel.textAlignment = .center publicKeyLabel.lineBreakMode = .byCharWrapping