@@ -223,7 +223,16 @@ class ShareVaultViewController: UIViewController {
223223 let contentLayoutGuide = scrollView. contentLayoutGuide
224224 let frameLayoutGuide = scrollView. frameLayoutGuide
225225
226- var constraints : [ NSLayoutConstraint ] = [
226+ var constraints = createBaseConstraints ( contentLayoutGuide: contentLayoutGuide, frameLayoutGuide: frameLayoutGuide)
227+ let topAnchor = addOptionalSubtitleConstraints ( to: & constraints)
228+ let lastContentView = addContentConstraints ( to: & constraints, topAnchor: topAnchor)
229+ addFooterConstraints ( to: & constraints, lastContentView: lastContentView)
230+
231+ NSLayoutConstraint . activate ( constraints)
232+ }
233+
234+ private func createBaseConstraints( contentLayoutGuide: UILayoutGuide , frameLayoutGuide: UILayoutGuide ) -> [ NSLayoutConstraint ] {
235+ return [
227236 scrollView. topAnchor. constraint ( equalTo: view. safeAreaLayoutGuide. topAnchor) ,
228237 scrollView. leadingAnchor. constraint ( equalTo: view. leadingAnchor) ,
229238 scrollView. trailingAnchor. constraint ( equalTo: view. trailingAnchor) ,
@@ -255,39 +264,40 @@ class ShareVaultViewController: UIViewController {
255264 visitHubButton. bottomAnchor. constraint ( equalTo: view. safeAreaLayoutGuide. bottomAnchor, constant: - LayoutConstants. standardSpacing) ,
256265 visitHubButton. heightAnchor. constraint ( equalToConstant: LayoutConstants . buttonHeight)
257266 ]
267+ }
258268
259- // Add subtitle constraints if it exists
260- let topAnchorForContent : NSLayoutYAxisAnchor
261- if viewModel. headerSubtitle != nil {
262- constraints. append ( contentsOf: [
263- subtitleLabel. topAnchor. constraint ( equalTo: titleLabel. bottomAnchor, constant: LayoutConstants . titleToSubtitleSpacing) ,
264- subtitleLabel. leadingAnchor. constraint ( equalTo: contentView. leadingAnchor, constant: LayoutConstants . horizontalPadding) ,
265- subtitleLabel. trailingAnchor. constraint ( equalTo: contentView. trailingAnchor, constant: - LayoutConstants. horizontalPadding)
266- ] )
267- topAnchorForContent = subtitleLabel. bottomAnchor
268- } else {
269- topAnchorForContent = titleLabel. bottomAnchor
269+ private func addOptionalSubtitleConstraints( to constraints: inout [ NSLayoutConstraint ] ) -> NSLayoutYAxisAnchor {
270+ guard viewModel. headerSubtitle != nil else {
271+ return titleLabel. bottomAnchor
270272 }
271273
272- // Determine the last content view (features or hub steps)
273- let lastContentView : UIView
274+ constraints. append ( contentsOf: [
275+ subtitleLabel. topAnchor. constraint ( equalTo: titleLabel. bottomAnchor, constant: LayoutConstants . titleToSubtitleSpacing) ,
276+ subtitleLabel. leadingAnchor. constraint ( equalTo: contentView. leadingAnchor, constant: LayoutConstants . horizontalPadding) ,
277+ subtitleLabel. trailingAnchor. constraint ( equalTo: contentView. trailingAnchor, constant: - LayoutConstants. horizontalPadding)
278+ ] )
279+ return subtitleLabel. bottomAnchor
280+ }
281+
282+ private func addContentConstraints( to constraints: inout [ NSLayoutConstraint ] , topAnchor: NSLayoutYAxisAnchor ) -> UIView {
274283 if viewModel. hubSteps != nil {
275284 constraints. append ( contentsOf: [
276- hubStepsStackView. topAnchor. constraint ( equalTo: topAnchorForContent , constant: LayoutConstants . subtitleToStepsSpacing) ,
285+ hubStepsStackView. topAnchor. constraint ( equalTo: topAnchor , constant: LayoutConstants . subtitleToStepsSpacing) ,
277286 hubStepsStackView. leadingAnchor. constraint ( equalTo: contentView. leadingAnchor, constant: LayoutConstants . horizontalPadding) ,
278287 hubStepsStackView. trailingAnchor. constraint ( equalTo: contentView. trailingAnchor, constant: - LayoutConstants. horizontalPadding)
279288 ] )
280- lastContentView = hubStepsStackView
289+ return hubStepsStackView
281290 } else {
282291 constraints. append ( contentsOf: [
283- featuresLabel. topAnchor. constraint ( equalTo: topAnchorForContent , constant: LayoutConstants . titleToFeaturesSpacing) ,
292+ featuresLabel. topAnchor. constraint ( equalTo: topAnchor , constant: LayoutConstants . titleToFeaturesSpacing) ,
284293 featuresLabel. leadingAnchor. constraint ( equalTo: contentView. leadingAnchor, constant: LayoutConstants . horizontalPadding) ,
285294 featuresLabel. trailingAnchor. constraint ( equalTo: contentView. trailingAnchor, constant: - LayoutConstants. horizontalPadding)
286295 ] )
287- lastContentView = featuresLabel
296+ return featuresLabel
288297 }
298+ }
289299
290- // Add footer constraints only if footer exists
300+ private func addFooterConstraints ( to constraints: inout [ NSLayoutConstraint ] , lastContentView : UIView ) {
291301 if viewModel. footerText != nil {
292302 constraints. append ( contentsOf: [
293303 footerTextView. topAnchor. constraint ( equalTo: lastContentView. bottomAnchor, constant: LayoutConstants . largeSpacing) ,
@@ -300,8 +310,6 @@ class ShareVaultViewController: UIViewController {
300310 lastContentView. bottomAnchor. constraint ( equalTo: contentView. bottomAnchor, constant: - LayoutConstants. titleSpacing)
301311 )
302312 }
303-
304- NSLayoutConstraint . activate ( constraints)
305313 }
306314
307315 private func createFooterAttributedText( ) -> NSAttributedString {
0 commit comments