Преглед изворни кода

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 пре 6 дана
родитељ
комит
570d07b7cd
1 измењених фајлова са 30 додато и 48 уклоњено
  1. 30 48
      zoom_app/ViewController.swift

+ 30 - 48
zoom_app/ViewController.swift

@@ -691,14 +691,14 @@ class ViewController: NSViewController {
691
         content.translatesAutoresizingMaskIntoConstraints = false
691
         content.translatesAutoresizingMaskIntoConstraints = false
692
 
692
 
693
         NSLayoutConstraint.activate([
693
         NSLayoutConstraint.activate([
694
-            shell.leadingAnchor.constraint(equalTo: root.leadingAnchor, constant: 8),
695
-            shell.trailingAnchor.constraint(equalTo: root.trailingAnchor, constant: -8),
694
+            shell.leadingAnchor.constraint(equalTo: root.leadingAnchor, constant: 4),
695
+            shell.trailingAnchor.constraint(equalTo: root.trailingAnchor, constant: -4),
696
             shell.topAnchor.constraint(equalTo: root.topAnchor, constant: 0),
696
             shell.topAnchor.constraint(equalTo: root.topAnchor, constant: 0),
697
-            shell.bottomAnchor.constraint(equalTo: root.bottomAnchor, constant: -8),
697
+            shell.bottomAnchor.constraint(equalTo: root.bottomAnchor, constant: -4),
698
             chromeColumn.leadingAnchor.constraint(equalTo: shell.leadingAnchor),
698
             chromeColumn.leadingAnchor.constraint(equalTo: shell.leadingAnchor),
699
             chromeColumn.topAnchor.constraint(equalTo: shell.topAnchor),
699
             chromeColumn.topAnchor.constraint(equalTo: shell.topAnchor),
700
             chromeColumn.bottomAnchor.constraint(equalTo: shell.bottomAnchor),
700
             chromeColumn.bottomAnchor.constraint(equalTo: shell.bottomAnchor),
701
-            chromeColumn.widthAnchor.constraint(equalToConstant: 146),
701
+            chromeColumn.widthAnchor.constraint(equalToConstant: 128),
702
             chromeDivider.topAnchor.constraint(equalTo: chromeColumn.topAnchor),
702
             chromeDivider.topAnchor.constraint(equalTo: chromeColumn.topAnchor),
703
             chromeDivider.bottomAnchor.constraint(equalTo: chromeColumn.bottomAnchor),
703
             chromeDivider.bottomAnchor.constraint(equalTo: chromeColumn.bottomAnchor),
704
             chromeDivider.trailingAnchor.constraint(equalTo: chromeColumn.trailingAnchor),
704
             chromeDivider.trailingAnchor.constraint(equalTo: chromeColumn.trailingAnchor),
@@ -790,11 +790,6 @@ class ViewController: NSViewController {
790
         panel.layer?.borderWidth = 1
790
         panel.layer?.borderWidth = 1
791
         panel.layer?.borderColor = NSColor.white.withAlphaComponent(0.07).cgColor
791
         panel.layer?.borderColor = NSColor.white.withAlphaComponent(0.07).cgColor
792
         
792
         
793
-        let panelHeaderStrip = NSView()
794
-        panelHeaderStrip.wantsLayer = true
795
-        panelHeaderStrip.layer?.backgroundColor = NSColor.white.withAlphaComponent(0.03).cgColor
796
-        panelHeaderStrip.layer?.cornerRadius = 12
797
-
798
         let todaysDateFormatter = DateFormatter()
793
         let todaysDateFormatter = DateFormatter()
799
         todaysDateFormatter.dateFormat = "EEEE, MMM d"
794
         todaysDateFormatter.dateFormat = "EEEE, MMM d"
800
         let panelHeader = makeLabel(todaysDateFormatter.string(from: Date()), size: 21, color: primaryText, weight: .semibold, centered: false)
795
         let panelHeader = makeLabel(todaysDateFormatter.string(from: Date()), size: 21, color: primaryText, weight: .semibold, centered: false)
@@ -821,18 +816,11 @@ class ViewController: NSViewController {
821
         openRecordings.layer?.borderWidth = 1
816
         openRecordings.layer?.borderWidth = 1
822
         openRecordings.layer?.borderColor = NSColor.white.withAlphaComponent(0.07).cgColor
817
         openRecordings.layer?.borderColor = NSColor.white.withAlphaComponent(0.07).cgColor
823
 
818
 
824
-        let contentPanel = NSView()
825
-        contentPanel.wantsLayer = true
826
-        contentPanel.layer?.backgroundColor = contentShellBackground.cgColor
827
-        contentPanel.layer?.cornerRadius = 12
828
-        contentPanel.layer?.borderWidth = 1
829
-        contentPanel.layer?.borderColor = NSColor.white.withAlphaComponent(0.04).cgColor
830
         let contentColumn = NSView()
819
         let contentColumn = NSView()
831
         contentColumn.translatesAutoresizingMaskIntoConstraints = false
820
         contentColumn.translatesAutoresizingMaskIntoConstraints = false
832
         content.addSubview(topBar)
821
         content.addSubview(topBar)
833
         content.addSubview(topBarDivider)
822
         content.addSubview(topBarDivider)
834
-        content.addSubview(contentPanel)
835
-        contentPanel.addSubview(contentColumn)
823
+        content.addSubview(contentColumn)
836
 
824
 
837
         [brandStack, leftTopBarCluster, rightTopBarCluster, searchPill, search].forEach {
825
         [brandStack, leftTopBarCluster, rightTopBarCluster, searchPill, search].forEach {
838
             $0.translatesAutoresizingMaskIntoConstraints = false
826
             $0.translatesAutoresizingMaskIntoConstraints = false
@@ -844,13 +832,12 @@ class ViewController: NSViewController {
844
             $0.translatesAutoresizingMaskIntoConstraints = false
832
             $0.translatesAutoresizingMaskIntoConstraints = false
845
             topBar.addSubview($0)
833
             topBar.addSubview($0)
846
         }
834
         }
847
-        [welcome, timeTitle, dateTitle, actions, panel, panelHeaderStrip, panelHeader, meetingsStatus, noMeeting, meetingsScrollView, openRecordings].forEach {
835
+        [welcome, timeTitle, dateTitle, actions, panel, panelHeader, meetingsStatus, noMeeting, meetingsScrollView, openRecordings].forEach {
848
             $0.translatesAutoresizingMaskIntoConstraints = false
836
             $0.translatesAutoresizingMaskIntoConstraints = false
849
             contentColumn.addSubview($0)
837
             contentColumn.addSubview($0)
850
         }
838
         }
851
         topBar.translatesAutoresizingMaskIntoConstraints = false
839
         topBar.translatesAutoresizingMaskIntoConstraints = false
852
         topBarDivider.translatesAutoresizingMaskIntoConstraints = false
840
         topBarDivider.translatesAutoresizingMaskIntoConstraints = false
853
-        contentPanel.translatesAutoresizingMaskIntoConstraints = false
854
         meetingsDocument.translatesAutoresizingMaskIntoConstraints = false
841
         meetingsDocument.translatesAutoresizingMaskIntoConstraints = false
855
         meetingsStack.translatesAutoresizingMaskIntoConstraints = false
842
         meetingsStack.translatesAutoresizingMaskIntoConstraints = false
856
         meetingsScrollView.documentView = meetingsDocument
843
         meetingsScrollView.documentView = meetingsDocument
@@ -869,15 +856,10 @@ class ViewController: NSViewController {
869
             topBarDivider.trailingAnchor.constraint(equalTo: content.trailingAnchor),
856
             topBarDivider.trailingAnchor.constraint(equalTo: content.trailingAnchor),
870
             topBarDivider.heightAnchor.constraint(equalToConstant: 1),
857
             topBarDivider.heightAnchor.constraint(equalToConstant: 1),
871
 
858
 
872
-            contentPanel.topAnchor.constraint(equalTo: topBarDivider.bottomAnchor, constant: 6),
873
-            contentPanel.leadingAnchor.constraint(equalTo: content.leadingAnchor, constant: 8),
874
-            contentPanel.trailingAnchor.constraint(equalTo: content.trailingAnchor, constant: -8),
875
-            contentPanel.bottomAnchor.constraint(equalTo: content.bottomAnchor, constant: -8),
876
-
877
-            contentColumn.topAnchor.constraint(equalTo: contentPanel.topAnchor),
878
-            contentColumn.bottomAnchor.constraint(equalTo: contentPanel.bottomAnchor),
879
-            contentColumn.leadingAnchor.constraint(equalTo: contentPanel.leadingAnchor),
880
-            contentColumn.trailingAnchor.constraint(equalTo: contentPanel.trailingAnchor),
859
+            contentColumn.topAnchor.constraint(equalTo: topBarDivider.bottomAnchor, constant: 14),
860
+            contentColumn.bottomAnchor.constraint(equalTo: content.bottomAnchor, constant: -10),
861
+            contentColumn.leadingAnchor.constraint(equalTo: content.leadingAnchor, constant: 8),
862
+            contentColumn.trailingAnchor.constraint(equalTo: content.trailingAnchor, constant: -8),
881
 
863
 
882
             leftTopBarCluster.leadingAnchor.constraint(equalTo: topBar.leadingAnchor, constant: 40),
864
             leftTopBarCluster.leadingAnchor.constraint(equalTo: topBar.leadingAnchor, constant: 40),
883
             leftTopBarCluster.centerYAnchor.constraint(equalTo: topBar.centerYAnchor),
865
             leftTopBarCluster.centerYAnchor.constraint(equalTo: topBar.centerYAnchor),
@@ -896,7 +878,7 @@ class ViewController: NSViewController {
896
             profileChip.widthAnchor.constraint(equalToConstant: 34),
878
             profileChip.widthAnchor.constraint(equalToConstant: 34),
897
             profileChip.heightAnchor.constraint(equalToConstant: 34),
879
             profileChip.heightAnchor.constraint(equalToConstant: 34),
898
 
880
 
899
-            welcome.topAnchor.constraint(equalTo: contentColumn.topAnchor, constant: 22),
881
+            welcome.topAnchor.constraint(equalTo: contentColumn.topAnchor, constant: 18),
900
             welcome.centerXAnchor.constraint(equalTo: contentColumn.centerXAnchor),
882
             welcome.centerXAnchor.constraint(equalTo: contentColumn.centerXAnchor),
901
 
883
 
902
             timeTitle.topAnchor.constraint(equalTo: welcome.bottomAnchor, constant: 12),
884
             timeTitle.topAnchor.constraint(equalTo: welcome.bottomAnchor, constant: 12),
@@ -906,30 +888,25 @@ class ViewController: NSViewController {
906
 
888
 
907
             actions.topAnchor.constraint(equalTo: dateTitle.bottomAnchor, constant: 28),
889
             actions.topAnchor.constraint(equalTo: dateTitle.bottomAnchor, constant: 28),
908
             actions.centerXAnchor.constraint(equalTo: contentColumn.centerXAnchor),
890
             actions.centerXAnchor.constraint(equalTo: contentColumn.centerXAnchor),
909
-            actions.leadingAnchor.constraint(greaterThanOrEqualTo: contentColumn.leadingAnchor, constant: 18),
910
-            actions.trailingAnchor.constraint(lessThanOrEqualTo: contentColumn.trailingAnchor, constant: -18),
891
+            actions.leadingAnchor.constraint(greaterThanOrEqualTo: contentColumn.leadingAnchor, constant: 12),
892
+            actions.trailingAnchor.constraint(lessThanOrEqualTo: contentColumn.trailingAnchor, constant: -12),
911
             actions.heightAnchor.constraint(equalToConstant: 100),
893
             actions.heightAnchor.constraint(equalToConstant: 100),
912
 
894
 
913
-            panel.topAnchor.constraint(equalTo: actions.bottomAnchor, constant: 22),
914
-            panel.leadingAnchor.constraint(equalTo: contentColumn.leadingAnchor, constant: 26),
915
-            panel.trailingAnchor.constraint(equalTo: contentColumn.trailingAnchor, constant: -26),
916
-            panel.heightAnchor.constraint(equalToConstant: 316),
917
-            panel.bottomAnchor.constraint(lessThanOrEqualTo: contentColumn.bottomAnchor, constant: -24),
918
-            
919
-            panelHeaderStrip.topAnchor.constraint(equalTo: panel.topAnchor, constant: 10),
920
-            panelHeaderStrip.leadingAnchor.constraint(equalTo: panel.leadingAnchor, constant: 10),
921
-            panelHeaderStrip.trailingAnchor.constraint(equalTo: panel.trailingAnchor, constant: -10),
922
-            panelHeaderStrip.heightAnchor.constraint(equalToConstant: 44),
923
-
924
-            panelHeader.centerYAnchor.constraint(equalTo: panelHeaderStrip.centerYAnchor),
925
-            panelHeader.leadingAnchor.constraint(equalTo: panelHeaderStrip.leadingAnchor, constant: 14),
926
-            meetingsStatus.centerYAnchor.constraint(equalTo: panelHeaderStrip.centerYAnchor),
927
-            meetingsStatus.trailingAnchor.constraint(equalTo: panelHeaderStrip.trailingAnchor, constant: -14),
895
+            panel.topAnchor.constraint(equalTo: actions.bottomAnchor, constant: 18),
896
+            panel.leadingAnchor.constraint(equalTo: contentColumn.leadingAnchor, constant: 6),
897
+            panel.trailingAnchor.constraint(equalTo: contentColumn.trailingAnchor, constant: -6),
898
+            panel.heightAnchor.constraint(greaterThanOrEqualToConstant: 280),
899
+            panel.bottomAnchor.constraint(equalTo: contentColumn.bottomAnchor, constant: -14),
900
+
901
+            panelHeader.topAnchor.constraint(equalTo: panel.topAnchor, constant: 20),
902
+            panelHeader.leadingAnchor.constraint(equalTo: panel.leadingAnchor, constant: 16),
903
+            meetingsStatus.centerYAnchor.constraint(equalTo: panelHeader.centerYAnchor),
904
+            meetingsStatus.trailingAnchor.constraint(equalTo: panel.trailingAnchor, constant: -16),
928
             noMeeting.leadingAnchor.constraint(equalTo: panel.leadingAnchor, constant: 18),
905
             noMeeting.leadingAnchor.constraint(equalTo: panel.leadingAnchor, constant: 18),
929
             noMeeting.trailingAnchor.constraint(equalTo: panel.trailingAnchor, constant: -18),
906
             noMeeting.trailingAnchor.constraint(equalTo: panel.trailingAnchor, constant: -18),
930
             noMeeting.centerYAnchor.constraint(equalTo: panel.centerYAnchor),
907
             noMeeting.centerYAnchor.constraint(equalTo: panel.centerYAnchor),
931
 
908
 
932
-            meetingsScrollView.topAnchor.constraint(equalTo: panelHeaderStrip.bottomAnchor, constant: 10),
909
+            meetingsScrollView.topAnchor.constraint(equalTo: panelHeader.bottomAnchor, constant: 12),
933
             meetingsScrollView.leadingAnchor.constraint(equalTo: panel.leadingAnchor, constant: 14),
910
             meetingsScrollView.leadingAnchor.constraint(equalTo: panel.leadingAnchor, constant: 14),
934
             meetingsScrollView.trailingAnchor.constraint(equalTo: panel.trailingAnchor, constant: -14),
911
             meetingsScrollView.trailingAnchor.constraint(equalTo: panel.trailingAnchor, constant: -14),
935
             meetingsScrollView.bottomAnchor.constraint(equalTo: openRecordings.topAnchor, constant: -14),
912
             meetingsScrollView.bottomAnchor.constraint(equalTo: openRecordings.topAnchor, constant: -14),
@@ -1037,12 +1014,17 @@ class ViewController: NSViewController {
1037
         }
1014
         }
1038
 
1015
 
1039
         NSLayoutConstraint.activate([
1016
         NSLayoutConstraint.activate([
1040
-            stack.topAnchor.constraint(equalTo: sidebar.topAnchor, constant: style == .home ? 8 : 18),
1041
             stack.leadingAnchor.constraint(equalTo: sidebar.leadingAnchor, constant: 4),
1017
             stack.leadingAnchor.constraint(equalTo: sidebar.leadingAnchor, constant: 4),
1042
             stack.trailingAnchor.constraint(equalTo: sidebar.trailingAnchor, constant: -4)
1018
             stack.trailingAnchor.constraint(equalTo: sidebar.trailingAnchor, constant: -4)
1043
         ])
1019
         ])
1044
         if style == .home {
1020
         if style == .home {
1021
+            NSLayoutConstraint.activate([
1022
+                stack.topAnchor.constraint(greaterThanOrEqualTo: sidebar.topAnchor, constant: 18),
1023
+                stack.centerYAnchor.constraint(equalTo: sidebar.centerYAnchor, constant: 30)
1024
+            ])
1045
             stack.bottomAnchor.constraint(lessThanOrEqualTo: sidebar.bottomAnchor, constant: -18).isActive = true
1025
             stack.bottomAnchor.constraint(lessThanOrEqualTo: sidebar.bottomAnchor, constant: -18).isActive = true
1026
+        } else {
1027
+            stack.topAnchor.constraint(equalTo: sidebar.topAnchor, constant: 18).isActive = true
1046
         }
1028
         }
1047
 
1029
 
1048
         return sidebar
1030
         return sidebar