Jelajahi Sumber

Simplify home layout container hierarchy and expand content width.

This reduces nested panel fragmentation, removes redundant header wrappers, and rebalances sidebar/content spacing so the dashboard aligns more closely with the target reference layout.

Made-with: Cursor
huzaifahayat12 3 bulan lalu
induk
melakukan
570d07b7cd
1 mengubah file dengan 30 tambahan dan 48 penghapusan
  1. 30 48
      zoom_app/ViewController.swift

+ 30 - 48
zoom_app/ViewController.swift

@@ -691,14 +691,14 @@ class ViewController: NSViewController {
         content.translatesAutoresizingMaskIntoConstraints = false
 
         NSLayoutConstraint.activate([
-            shell.leadingAnchor.constraint(equalTo: root.leadingAnchor, constant: 8),
-            shell.trailingAnchor.constraint(equalTo: root.trailingAnchor, constant: -8),
+            shell.leadingAnchor.constraint(equalTo: root.leadingAnchor, constant: 4),
+            shell.trailingAnchor.constraint(equalTo: root.trailingAnchor, constant: -4),
             shell.topAnchor.constraint(equalTo: root.topAnchor, constant: 0),
-            shell.bottomAnchor.constraint(equalTo: root.bottomAnchor, constant: -8),
+            shell.bottomAnchor.constraint(equalTo: root.bottomAnchor, constant: -4),
             chromeColumn.leadingAnchor.constraint(equalTo: shell.leadingAnchor),
             chromeColumn.topAnchor.constraint(equalTo: shell.topAnchor),
             chromeColumn.bottomAnchor.constraint(equalTo: shell.bottomAnchor),
-            chromeColumn.widthAnchor.constraint(equalToConstant: 146),
+            chromeColumn.widthAnchor.constraint(equalToConstant: 128),
             chromeDivider.topAnchor.constraint(equalTo: chromeColumn.topAnchor),
             chromeDivider.bottomAnchor.constraint(equalTo: chromeColumn.bottomAnchor),
             chromeDivider.trailingAnchor.constraint(equalTo: chromeColumn.trailingAnchor),
@@ -790,11 +790,6 @@ class ViewController: NSViewController {
         panel.layer?.borderWidth = 1
         panel.layer?.borderColor = NSColor.white.withAlphaComponent(0.07).cgColor
         
-        let panelHeaderStrip = NSView()
-        panelHeaderStrip.wantsLayer = true
-        panelHeaderStrip.layer?.backgroundColor = NSColor.white.withAlphaComponent(0.03).cgColor
-        panelHeaderStrip.layer?.cornerRadius = 12
-
         let todaysDateFormatter = DateFormatter()
         todaysDateFormatter.dateFormat = "EEEE, MMM d"
         let panelHeader = makeLabel(todaysDateFormatter.string(from: Date()), size: 21, color: primaryText, weight: .semibold, centered: false)
@@ -821,18 +816,11 @@ class ViewController: NSViewController {
         openRecordings.layer?.borderWidth = 1
         openRecordings.layer?.borderColor = NSColor.white.withAlphaComponent(0.07).cgColor
 
-        let contentPanel = NSView()
-        contentPanel.wantsLayer = true
-        contentPanel.layer?.backgroundColor = contentShellBackground.cgColor
-        contentPanel.layer?.cornerRadius = 12
-        contentPanel.layer?.borderWidth = 1
-        contentPanel.layer?.borderColor = NSColor.white.withAlphaComponent(0.04).cgColor
         let contentColumn = NSView()
         contentColumn.translatesAutoresizingMaskIntoConstraints = false
         content.addSubview(topBar)
         content.addSubview(topBarDivider)
-        content.addSubview(contentPanel)
-        contentPanel.addSubview(contentColumn)
+        content.addSubview(contentColumn)
 
         [brandStack, leftTopBarCluster, rightTopBarCluster, searchPill, search].forEach {
             $0.translatesAutoresizingMaskIntoConstraints = false
@@ -844,13 +832,12 @@ class ViewController: NSViewController {
             $0.translatesAutoresizingMaskIntoConstraints = false
             topBar.addSubview($0)
         }
-        [welcome, timeTitle, dateTitle, actions, panel, panelHeaderStrip, panelHeader, meetingsStatus, noMeeting, meetingsScrollView, openRecordings].forEach {
+        [welcome, timeTitle, dateTitle, actions, panel, panelHeader, meetingsStatus, noMeeting, meetingsScrollView, openRecordings].forEach {
             $0.translatesAutoresizingMaskIntoConstraints = false
             contentColumn.addSubview($0)
         }
         topBar.translatesAutoresizingMaskIntoConstraints = false
         topBarDivider.translatesAutoresizingMaskIntoConstraints = false
-        contentPanel.translatesAutoresizingMaskIntoConstraints = false
         meetingsDocument.translatesAutoresizingMaskIntoConstraints = false
         meetingsStack.translatesAutoresizingMaskIntoConstraints = false
         meetingsScrollView.documentView = meetingsDocument
@@ -869,15 +856,10 @@ class ViewController: NSViewController {
             topBarDivider.trailingAnchor.constraint(equalTo: content.trailingAnchor),
             topBarDivider.heightAnchor.constraint(equalToConstant: 1),
 
-            contentPanel.topAnchor.constraint(equalTo: topBarDivider.bottomAnchor, constant: 6),
-            contentPanel.leadingAnchor.constraint(equalTo: content.leadingAnchor, constant: 8),
-            contentPanel.trailingAnchor.constraint(equalTo: content.trailingAnchor, constant: -8),
-            contentPanel.bottomAnchor.constraint(equalTo: content.bottomAnchor, constant: -8),
-
-            contentColumn.topAnchor.constraint(equalTo: contentPanel.topAnchor),
-            contentColumn.bottomAnchor.constraint(equalTo: contentPanel.bottomAnchor),
-            contentColumn.leadingAnchor.constraint(equalTo: contentPanel.leadingAnchor),
-            contentColumn.trailingAnchor.constraint(equalTo: contentPanel.trailingAnchor),
+            contentColumn.topAnchor.constraint(equalTo: topBarDivider.bottomAnchor, constant: 14),
+            contentColumn.bottomAnchor.constraint(equalTo: content.bottomAnchor, constant: -10),
+            contentColumn.leadingAnchor.constraint(equalTo: content.leadingAnchor, constant: 8),
+            contentColumn.trailingAnchor.constraint(equalTo: content.trailingAnchor, constant: -8),
 
             leftTopBarCluster.leadingAnchor.constraint(equalTo: topBar.leadingAnchor, constant: 40),
             leftTopBarCluster.centerYAnchor.constraint(equalTo: topBar.centerYAnchor),
@@ -896,7 +878,7 @@ class ViewController: NSViewController {
             profileChip.widthAnchor.constraint(equalToConstant: 34),
             profileChip.heightAnchor.constraint(equalToConstant: 34),
 
-            welcome.topAnchor.constraint(equalTo: contentColumn.topAnchor, constant: 22),
+            welcome.topAnchor.constraint(equalTo: contentColumn.topAnchor, constant: 18),
             welcome.centerXAnchor.constraint(equalTo: contentColumn.centerXAnchor),
 
             timeTitle.topAnchor.constraint(equalTo: welcome.bottomAnchor, constant: 12),
@@ -906,30 +888,25 @@ class ViewController: NSViewController {
 
             actions.topAnchor.constraint(equalTo: dateTitle.bottomAnchor, constant: 28),
             actions.centerXAnchor.constraint(equalTo: contentColumn.centerXAnchor),
-            actions.leadingAnchor.constraint(greaterThanOrEqualTo: contentColumn.leadingAnchor, constant: 18),
-            actions.trailingAnchor.constraint(lessThanOrEqualTo: contentColumn.trailingAnchor, constant: -18),
+            actions.leadingAnchor.constraint(greaterThanOrEqualTo: contentColumn.leadingAnchor, constant: 12),
+            actions.trailingAnchor.constraint(lessThanOrEqualTo: contentColumn.trailingAnchor, constant: -12),
             actions.heightAnchor.constraint(equalToConstant: 100),
 
-            panel.topAnchor.constraint(equalTo: actions.bottomAnchor, constant: 22),
-            panel.leadingAnchor.constraint(equalTo: contentColumn.leadingAnchor, constant: 26),
-            panel.trailingAnchor.constraint(equalTo: contentColumn.trailingAnchor, constant: -26),
-            panel.heightAnchor.constraint(equalToConstant: 316),
-            panel.bottomAnchor.constraint(lessThanOrEqualTo: contentColumn.bottomAnchor, constant: -24),
-            
-            panelHeaderStrip.topAnchor.constraint(equalTo: panel.topAnchor, constant: 10),
-            panelHeaderStrip.leadingAnchor.constraint(equalTo: panel.leadingAnchor, constant: 10),
-            panelHeaderStrip.trailingAnchor.constraint(equalTo: panel.trailingAnchor, constant: -10),
-            panelHeaderStrip.heightAnchor.constraint(equalToConstant: 44),
-
-            panelHeader.centerYAnchor.constraint(equalTo: panelHeaderStrip.centerYAnchor),
-            panelHeader.leadingAnchor.constraint(equalTo: panelHeaderStrip.leadingAnchor, constant: 14),
-            meetingsStatus.centerYAnchor.constraint(equalTo: panelHeaderStrip.centerYAnchor),
-            meetingsStatus.trailingAnchor.constraint(equalTo: panelHeaderStrip.trailingAnchor, constant: -14),
+            panel.topAnchor.constraint(equalTo: actions.bottomAnchor, constant: 18),
+            panel.leadingAnchor.constraint(equalTo: contentColumn.leadingAnchor, constant: 6),
+            panel.trailingAnchor.constraint(equalTo: contentColumn.trailingAnchor, constant: -6),
+            panel.heightAnchor.constraint(greaterThanOrEqualToConstant: 280),
+            panel.bottomAnchor.constraint(equalTo: contentColumn.bottomAnchor, constant: -14),
+
+            panelHeader.topAnchor.constraint(equalTo: panel.topAnchor, constant: 20),
+            panelHeader.leadingAnchor.constraint(equalTo: panel.leadingAnchor, constant: 16),
+            meetingsStatus.centerYAnchor.constraint(equalTo: panelHeader.centerYAnchor),
+            meetingsStatus.trailingAnchor.constraint(equalTo: panel.trailingAnchor, constant: -16),
             noMeeting.leadingAnchor.constraint(equalTo: panel.leadingAnchor, constant: 18),
             noMeeting.trailingAnchor.constraint(equalTo: panel.trailingAnchor, constant: -18),
             noMeeting.centerYAnchor.constraint(equalTo: panel.centerYAnchor),
 
-            meetingsScrollView.topAnchor.constraint(equalTo: panelHeaderStrip.bottomAnchor, constant: 10),
+            meetingsScrollView.topAnchor.constraint(equalTo: panelHeader.bottomAnchor, constant: 12),
             meetingsScrollView.leadingAnchor.constraint(equalTo: panel.leadingAnchor, constant: 14),
             meetingsScrollView.trailingAnchor.constraint(equalTo: panel.trailingAnchor, constant: -14),
             meetingsScrollView.bottomAnchor.constraint(equalTo: openRecordings.topAnchor, constant: -14),
@@ -1037,12 +1014,17 @@ class ViewController: NSViewController {
         }
 
         NSLayoutConstraint.activate([
-            stack.topAnchor.constraint(equalTo: sidebar.topAnchor, constant: style == .home ? 8 : 18),
             stack.leadingAnchor.constraint(equalTo: sidebar.leadingAnchor, constant: 4),
             stack.trailingAnchor.constraint(equalTo: sidebar.trailingAnchor, constant: -4)
         ])
         if style == .home {
+            NSLayoutConstraint.activate([
+                stack.topAnchor.constraint(greaterThanOrEqualTo: sidebar.topAnchor, constant: 18),
+                stack.centerYAnchor.constraint(equalTo: sidebar.centerYAnchor, constant: 30)
+            ])
             stack.bottomAnchor.constraint(lessThanOrEqualTo: sidebar.bottomAnchor, constant: -18).isActive = true
+        } else {
+            stack.topAnchor.constraint(equalTo: sidebar.topAnchor, constant: 18).isActive = true
         }
 
         return sidebar