fix
杨锴
2024-08-19 d9a2bbdb9595037432c36766489110c4b9229ac0
fix
79个文件已添加
11个文件已修改
2992 ■■■■■ 已修改文件
Pods/Pods.xcodeproj/project.pbxproj 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse.xcodeproj/project.pbxproj 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Btns/btn_sendGift.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Btns/btn_sendGift.imageset/btn_sendGift@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Btns/btn_sendGift.imageset/btn_sendGift@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/course_1.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/course_1.imageset/course_1@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/course_1.imageset/course_1@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/course_2.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/course_2.imageset/course_2@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/course_2.imageset/course_2@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/course_3.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/course_3.imageset/course_3@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/course_3.imageset/course_3@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/course_4.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/course_4.imageset/course_4@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/course_4.imageset/course_4@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/course_5.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/course_5.imageset/course_5@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/course_5.imageset/course_5@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/course_6.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/course_6.imageset/course_6@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/course_6.imageset/course_6@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/course_7.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/course_7.imageset/course_7@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/course_7.imageset/course_7@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/course_8.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/course_8.imageset/course_8@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/course_8.imageset/course_8@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/icon_local.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/icon_local.imageset/icon_local@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/icon_local.imageset/icon_local@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/icon_offline.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/icon_offline.imageset/icon_offline@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/icon_offline.imageset/icon_offline@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/icon_phone.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/icon_phone.imageset/icon_phone@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/icon_phone.imageset/icon_phone@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/icon_search.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/icon_search.imageset/icon_search@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/icon_search.imageset/icon_search@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/icon_time.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/icon_time.imageset/icon_time@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/icon_time.imageset/icon_time@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/icon_time_1.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/icon_time_1.imageset/icon_time_1@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/icon_time_1.imageset/icon_time_1@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/icon_user_1.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/icon_user_1.imageset/icon_user_1@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Icons/icon_user_1.imageset/icon_user_1@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Placeholder/bg_pavilion_top.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Placeholder/bg_pavilion_top.imageset/bg_pavilion_top@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Placeholder/bg_pavilion_top.imageset/bg_pavilion_top@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Base/BaseNav.swift 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Base/BaseVC.swift 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Course/CCell/CourseOfficalCommendTopCCell.swift 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Course/CCell/CourseOfficalCommendTopCCell.xib 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Course/CCell/CourseOfficialItemCCell.swift 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Course/CCell/CourseOfficialItemCCell.xib 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Course/TCell/CourseDetail_1_TCell.swift 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Course/TCell/CourseDetail_1_TCell.xib 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Course/TCell/CourseDetail_2_Inner_TCell.swift 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Course/TCell/CourseDetail_2_Inner_TCell.xib 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Course/TCell/CourseDetail_2_TCell.swift 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Course/TCell/CourseDetail_2_TCell.xib 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Course/TCell/CourseDetail_3_TCell.swift 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Course/TCell/CourseDetail_3_TCell.xib 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Course/TCell/MenuListTCell.swift 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Course/TCell/MenuListTCell.xib 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Course/VC/CourseDetialVC.swift 308 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Course/VC/CourseDetialVideoVC.swift 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Course/VC/CourseDetialVideoVC.xib 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Course/VC/CourseMenuVC.swift 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Course/VC/CourseVCOfficalCommentVC.swift 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Course/VC/CourseVCTeacherSpecialVC.swift 84 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Course/View/CourseDetailHeaderView.swift 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Course/View/CourseDetailHeaderView.xib 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Course/View/CourseSendGiftView.swift 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Course/View/CourseSendGiftView.xib 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Home/HomeVC.swift 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Other/View/VideoView.swift 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Pavilion/CCell/PavilionItemCell.swift 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Pavilion/CCell/PavilionItemCell.xib 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Pavilion/PavilionVC.swift 73 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Pavilion/PavilionVC.xib 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Pavilion/VC/PavilionDetailVC.swift 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Pavilion/VC/PavilionDetailVC.xib 226 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Pavilion/VC/PavilionSearchVC.swift 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Pavilion/VC/PavilionSearchVC.xib 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/SceneDelegate.swift 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pods/Pods.xcodeproj/project.pbxproj
@@ -3767,7 +3767,7 @@
        B8E1D8B18DBE43F148D8D9E86FF2B00A /* JQ_PhotoTool.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = JQ_PhotoTool.swift; sourceTree = "<group>"; };
        B8EA55A5A6DB4233FEF4585820E0B43C /* OSSAllRequestNeededMessage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OSSAllRequestNeededMessage.m; path = AliyunOSSSDK/OSSAllRequestNeededMessage.m; sourceTree = "<group>"; };
        B8F2E5DB318CB0208BE8EB770F059547 /* RxCollectionViewDataSourcePrefetchingProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxCollectionViewDataSourcePrefetchingProxy.swift; path = RxCocoa/iOS/Proxies/RxCollectionViewDataSourcePrefetchingProxy.swift; sourceTree = "<group>"; };
        B9084FE779702931E8DF1D00A2D725FB /* ObjectMapper */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ObjectMapper; path = ObjectMapper.framework; sourceTree = BUILT_PRODUCTS_DIR; };
        B9084FE779702931E8DF1D00A2D725FB /* ObjectMapper.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ObjectMapper.framework; sourceTree = BUILT_PRODUCTS_DIR; };
        B9154CF3AE667C5BF038006941996F24 /* OSSGetObjectTaggingResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OSSGetObjectTaggingResult.h; path = AliyunOSSSDK/OSSGetObjectTaggingResult.h; sourceTree = "<group>"; };
        B942A9A96463372AA05EF5387CBD484C /* PrimitiveSequence+Concurrency.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PrimitiveSequence+Concurrency.swift"; path = "RxSwift/Traits/PrimitiveSequence/PrimitiveSequence+Concurrency.swift"; sourceTree = "<group>"; };
        B959A71819DE5B506E289332C6178D9A /* DataRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataRequest.swift; path = Source/Core/DataRequest.swift; sourceTree = "<group>"; };
@@ -5411,7 +5411,7 @@
                7E3097CFEFDA621E9FB0E62009FF87FC /* MJRefresh-MJRefresh.Privacy */,
                1CAB16A12A28E8BE749202B03552307A /* ObjcExceptionBridging */,
                EF7CAA240FEB94F29DBE3D91C8BDE565 /* ObjcExceptionBridging-ObjcExceptionBridging */,
                B9084FE779702931E8DF1D00A2D725FB /* ObjectMapper */,
                B9084FE779702931E8DF1D00A2D725FB /* ObjectMapper.framework */,
                FE6B8ABE5D0AD8A55BCFA48D21915C07 /* ObjectMapper-Privacy */,
                9BF996C0A7457E7225FF8490CAF59206 /* Pods-XQMuse */,
                8596B7A0C5A3E188061E9EDDAB573FCE /* QMUIKit */,
@@ -9006,7 +9006,7 @@
            );
            name = ObjectMapper;
            productName = ObjectMapper;
            productReference = B9084FE779702931E8DF1D00A2D725FB /* ObjectMapper */;
            productReference = B9084FE779702931E8DF1D00A2D725FB /* ObjectMapper.framework */;
            productType = "com.apple.product-type.framework";
        };
        18BB9F72CD23264E98BCA91A99917C56 /* UserDefaultsStore */ = {
@@ -14198,7 +14198,7 @@
                GCC_PREFIX_HEADER = "Target Support Files/ObjectMapper/ObjectMapper-prefix.pch";
                INFOPLIST_FILE = "Target Support Files/ObjectMapper/ObjectMapper-Info.plist";
                INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
                IPHONEOS_DEPLOYMENT_TARGET = 13.0;
                IPHONEOS_DEPLOYMENT_TARGET = 10.0;
                LD_RUNPATH_SEARCH_PATHS = (
                    "$(inherited)",
                    "@executable_path/Frameworks",
@@ -14799,7 +14799,7 @@
                GCC_PREFIX_HEADER = "Target Support Files/ObjectMapper/ObjectMapper-prefix.pch";
                INFOPLIST_FILE = "Target Support Files/ObjectMapper/ObjectMapper-Info.plist";
                INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
                IPHONEOS_DEPLOYMENT_TARGET = 13.0;
                IPHONEOS_DEPLOYMENT_TARGET = 10.0;
                LD_RUNPATH_SEARCH_PATHS = (
                    "$(inherited)",
                    "@executable_path/Frameworks",
XQMuse.xcodeproj/project.pbxproj
@@ -13,6 +13,8 @@
        130913EB2C6DE33200418201 /* PaymentOrderResultVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130913E82C6DE33200418201 /* PaymentOrderResultVC.swift */; };
        130913EE2C6DE67E00418201 /* HomeRelaxBanner_2_1_CCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 130913ED2C6DE67E00418201 /* HomeRelaxBanner_2_1_CCell.xib */; };
        130913EF2C6DE67E00418201 /* HomeRelaxBanner_2_1_CCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130913EC2C6DE67E00418201 /* HomeRelaxBanner_2_1_CCell.swift */; };
        130AA4A82C72F71700F20944 /* CourseDetialVideoVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 130AA4A72C72F71700F20944 /* CourseDetialVideoVC.xib */; };
        130AA4A92C72F71700F20944 /* CourseDetialVideoVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130AA4A62C72F71700F20944 /* CourseDetialVideoVC.swift */; };
        130B76592C6C4963006371AF /* HomeRelaxVoiceCCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130B76572C6C4963006371AF /* HomeRelaxVoiceCCell.swift */; };
        130B765A2C6C4963006371AF /* HomeRelaxVoiceCCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 130B76582C6C4963006371AF /* HomeRelaxVoiceCCell.xib */; };
        130B765D2C6C4C33006371AF /* HomeItemListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130B765B2C6C4C33006371AF /* HomeItemListVC.swift */; };
@@ -25,15 +27,27 @@
        131E75C52C6B87C500E2C85D /* ForgotPasswordChangeVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 131E75C22C6B87C400E2C85D /* ForgotPasswordChangeVC.swift */; };
        132EB01C2C6B32B200990429 /* RegisterVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 132EB01A2C6B32B200990429 /* RegisterVC.swift */; };
        132EB01D2C6B32B200990429 /* RegisterVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 132EB01B2C6B32B200990429 /* RegisterVC.xib */; };
        13334FD52C731C1B00914086 /* VideoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13334FD42C731C1B00914086 /* VideoView.swift */; };
        13334FD72C731E0B00914086 /* PavilionVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13334FD62C731E0B00914086 /* PavilionVC.xib */; };
        13334FDB2C7321BE00914086 /* PavilionItemCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13334FD92C7321BE00914086 /* PavilionItemCell.swift */; };
        13334FDC2C7321BE00914086 /* PavilionItemCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13334FDA2C7321BE00914086 /* PavilionItemCell.xib */; };
        1333DC792C72D8C400D8ACAE /* CourseDetail_3_TCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1333DC782C72D8C400D8ACAE /* CourseDetail_3_TCell.xib */; };
        1333DC7A2C72D8C400D8ACAE /* CourseDetail_3_TCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1333DC772C72D8C400D8ACAE /* CourseDetail_3_TCell.swift */; };
        1333DC7C2C72E78F00D8ACAE /* CourseSendGiftView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1333DC7B2C72E78F00D8ACAE /* CourseSendGiftView.swift */; };
        1333DC7E2C72E7A500D8ACAE /* CourseSendGiftView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1333DC7D2C72E7A500D8ACAE /* CourseSendGiftView.xib */; };
        1336EFA52C6DEB550075E070 /* HoverHeaderFlowLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1336EFA42C6DEB550075E070 /* HoverHeaderFlowLayout.swift */; };
        1336EFA72C6DEC640075E070 /* PaymentOrderResultTopView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1336EFA62C6DEC640075E070 /* PaymentOrderResultTopView.swift */; };
        1336EFA92C6DEC6B0075E070 /* PaymentOrderResultTopView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1336EFA82C6DEC6B0075E070 /* PaymentOrderResultTopView.xib */; };
        13391E022C73334000B9513F /* PavilionDetailVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13391E012C73334000B9513F /* PavilionDetailVC.xib */; };
        13391E032C73334000B9513F /* PavilionDetailVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13391E002C73334000B9513F /* PavilionDetailVC.swift */; };
        134783CF2C6C86EC0096C736 /* PlaySettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 134783CE2C6C86EC0096C736 /* PlaySettingView.swift */; };
        134783D12C6C86F40096C736 /* PlaySettingView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 134783D02C6C86F40096C736 /* PlaySettingView.xib */; };
        134A45322C6E0D6400538D78 /* CourseVCOfficalCommentVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 134A45302C6E0D6400538D78 /* CourseVCOfficalCommentVC.swift */; };
        134A45352C6E0E0000538D78 /* CourseVCTeacherSpecialVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 134A45342C6E0E0000538D78 /* CourseVCTeacherSpecialVC.swift */; };
        134A45392C6E167D00538D78 /* CourseOfficalCommendTopCCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 134A45372C6E167D00538D78 /* CourseOfficalCommendTopCCell.swift */; };
        134A453A2C6E167D00538D78 /* CourseOfficalCommendTopCCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 134A45382C6E167D00538D78 /* CourseOfficalCommendTopCCell.xib */; };
        134CC7E02C73283700EAEFB7 /* PavilionSearchVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 134CC7DF2C73283700EAEFB7 /* PavilionSearchVC.xib */; };
        134CC7E12C73283700EAEFB7 /* PavilionSearchVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 134CC7DE2C73283700EAEFB7 /* PavilionSearchVC.swift */; };
        137175C62C6C3C4700B38EF1 /* SourceHanSansCN-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 137175C52C6C3C4700B38EF1 /* SourceHanSansCN-Regular.otf */; };
        137175C82C6C3C6D00B38EF1 /* Agenda-Light.otf in Resources */ = {isa = PBXBuildFile; fileRef = 137175C72C6C3C6D00B38EF1 /* Agenda-Light.otf */; };
        137175CB2C6C412A00B38EF1 /* BackgroundVoiceVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 137175C92C6C412A00B38EF1 /* BackgroundVoiceVC.swift */; };
@@ -93,6 +107,12 @@
        139C16602C6A0FBB00A924D9 /* TestLeftRightCollectionViewFlowLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 139C165F2C6A0FBB00A924D9 /* TestLeftRightCollectionViewFlowLayout.swift */; };
        139C16632C6A108A00A924D9 /* HomeRelaxBannerCCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 139C16612C6A108A00A924D9 /* HomeRelaxBannerCCell.swift */; };
        139C16642C6A108A00A924D9 /* HomeRelaxBannerCCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 139C16622C6A108A00A924D9 /* HomeRelaxBannerCCell.xib */; };
        13A659462C6F4B9E00F731FA /* CourseDetail_1_TCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13A659452C6F4B9E00F731FA /* CourseDetail_1_TCell.xib */; };
        13A659472C6F4B9E00F731FA /* CourseDetail_1_TCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13A659442C6F4B9E00F731FA /* CourseDetail_1_TCell.swift */; };
        13A6594A2C6F4F2D00F731FA /* CourseDetail_2_TCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13A659492C6F4F2D00F731FA /* CourseDetail_2_TCell.xib */; };
        13A6594B2C6F4F2D00F731FA /* CourseDetail_2_TCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13A659482C6F4F2D00F731FA /* CourseDetail_2_TCell.swift */; };
        13A6594E2C6F641100F731FA /* CourseDetail_2_Inner_TCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13A6594D2C6F641100F731FA /* CourseDetail_2_Inner_TCell.xib */; };
        13A6594F2C6F641100F731FA /* CourseDetail_2_Inner_TCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13A6594C2C6F641100F731FA /* CourseDetail_2_Inner_TCell.swift */; };
        13D256B42C6C68E7006FC2D7 /* ShareView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13D256B32C6C68E7006FC2D7 /* ShareView.swift */; };
        13D256B72C6C68F8006FC2D7 /* ShareView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13D256B62C6C68F8006FC2D7 /* ShareView.xib */; };
        13E0FBF92C6C8BDE009997AE /* CountdownChooseListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13E0FBF82C6C8BDE009997AE /* CountdownChooseListView.swift */; };
@@ -102,6 +122,14 @@
        13EFCDBE2C6DCF5800B51AE6 /* HomeTyroGuideVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13EFCDBD2C6DCF5800B51AE6 /* HomeTyroGuideVC.swift */; };
        13EFCDC12C6DD27A00B51AE6 /* PaymentOrderVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13EFCDBF2C6DD27A00B51AE6 /* PaymentOrderVC.swift */; };
        13EFCDC22C6DD27A00B51AE6 /* PaymentOrderVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13EFCDC02C6DD27A00B51AE6 /* PaymentOrderVC.xib */; };
        13FB6D7D2C6EE27100A0685D /* CourseOfficialItemCCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13FB6D7C2C6EE27100A0685D /* CourseOfficialItemCCell.xib */; };
        13FB6D7E2C6EE27100A0685D /* CourseOfficialItemCCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13FB6D7B2C6EE27100A0685D /* CourseOfficialItemCCell.swift */; };
        13FB6D802C6EED6000A0685D /* CourseMenuVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13FB6D7F2C6EED6000A0685D /* CourseMenuVC.swift */; };
        13FB6D842C6EEFE900A0685D /* MenuListTCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13FB6D832C6EEFE900A0685D /* MenuListTCell.xib */; };
        13FB6D852C6EEFE900A0685D /* MenuListTCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13FB6D822C6EEFE900A0685D /* MenuListTCell.swift */; };
        13FB6D872C6EF9DE00A0685D /* CourseDetialVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13FB6D862C6EF9DE00A0685D /* CourseDetialVC.swift */; };
        13FB6D8A2C6EFB4D00A0685D /* CourseDetailHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13FB6D892C6EFB4D00A0685D /* CourseDetailHeaderView.swift */; };
        13FB6D8C2C6EFB5400A0685D /* CourseDetailHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13FB6D8B2C6EFB5400A0685D /* CourseDetailHeaderView.xib */; };
        D80DD987C5D5D23DD582763D /* Pods_XQMuse.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 627C13604519744922724D64 /* Pods_XQMuse.framework */; };
/* End PBXBuildFile section */
@@ -112,6 +140,8 @@
        130913E92C6DE33200418201 /* PaymentOrderResultVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PaymentOrderResultVC.xib; sourceTree = "<group>"; };
        130913EC2C6DE67E00418201 /* HomeRelaxBanner_2_1_CCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeRelaxBanner_2_1_CCell.swift; sourceTree = "<group>"; };
        130913ED2C6DE67E00418201 /* HomeRelaxBanner_2_1_CCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeRelaxBanner_2_1_CCell.xib; sourceTree = "<group>"; };
        130AA4A62C72F71700F20944 /* CourseDetialVideoVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CourseDetialVideoVC.swift; sourceTree = "<group>"; };
        130AA4A72C72F71700F20944 /* CourseDetialVideoVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CourseDetialVideoVC.xib; sourceTree = "<group>"; };
        130B76572C6C4963006371AF /* HomeRelaxVoiceCCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeRelaxVoiceCCell.swift; sourceTree = "<group>"; };
        130B76582C6C4963006371AF /* HomeRelaxVoiceCCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeRelaxVoiceCCell.xib; sourceTree = "<group>"; };
        130B765B2C6C4C33006371AF /* HomeItemListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeItemListVC.swift; sourceTree = "<group>"; };
@@ -124,15 +154,27 @@
        131E75C32C6B87C400E2C85D /* ForgotPasswordChangeVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ForgotPasswordChangeVC.xib; sourceTree = "<group>"; };
        132EB01A2C6B32B200990429 /* RegisterVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegisterVC.swift; sourceTree = "<group>"; };
        132EB01B2C6B32B200990429 /* RegisterVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = RegisterVC.xib; sourceTree = "<group>"; };
        13334FD42C731C1B00914086 /* VideoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoView.swift; sourceTree = "<group>"; };
        13334FD62C731E0B00914086 /* PavilionVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PavilionVC.xib; sourceTree = "<group>"; };
        13334FD92C7321BE00914086 /* PavilionItemCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PavilionItemCell.swift; sourceTree = "<group>"; };
        13334FDA2C7321BE00914086 /* PavilionItemCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PavilionItemCell.xib; sourceTree = "<group>"; };
        1333DC772C72D8C400D8ACAE /* CourseDetail_3_TCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CourseDetail_3_TCell.swift; sourceTree = "<group>"; };
        1333DC782C72D8C400D8ACAE /* CourseDetail_3_TCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CourseDetail_3_TCell.xib; sourceTree = "<group>"; };
        1333DC7B2C72E78F00D8ACAE /* CourseSendGiftView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CourseSendGiftView.swift; sourceTree = "<group>"; };
        1333DC7D2C72E7A500D8ACAE /* CourseSendGiftView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CourseSendGiftView.xib; sourceTree = "<group>"; };
        1336EFA42C6DEB550075E070 /* HoverHeaderFlowLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HoverHeaderFlowLayout.swift; sourceTree = "<group>"; };
        1336EFA62C6DEC640075E070 /* PaymentOrderResultTopView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentOrderResultTopView.swift; sourceTree = "<group>"; };
        1336EFA82C6DEC6B0075E070 /* PaymentOrderResultTopView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PaymentOrderResultTopView.xib; sourceTree = "<group>"; };
        13391E002C73334000B9513F /* PavilionDetailVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PavilionDetailVC.swift; sourceTree = "<group>"; };
        13391E012C73334000B9513F /* PavilionDetailVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PavilionDetailVC.xib; sourceTree = "<group>"; };
        134783CE2C6C86EC0096C736 /* PlaySettingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaySettingView.swift; sourceTree = "<group>"; };
        134783D02C6C86F40096C736 /* PlaySettingView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PlaySettingView.xib; sourceTree = "<group>"; };
        134A45302C6E0D6400538D78 /* CourseVCOfficalCommentVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CourseVCOfficalCommentVC.swift; sourceTree = "<group>"; };
        134A45342C6E0E0000538D78 /* CourseVCTeacherSpecialVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CourseVCTeacherSpecialVC.swift; sourceTree = "<group>"; };
        134A45372C6E167D00538D78 /* CourseOfficalCommendTopCCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CourseOfficalCommendTopCCell.swift; sourceTree = "<group>"; };
        134A45382C6E167D00538D78 /* CourseOfficalCommendTopCCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CourseOfficalCommendTopCCell.xib; sourceTree = "<group>"; };
        134CC7DE2C73283700EAEFB7 /* PavilionSearchVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PavilionSearchVC.swift; sourceTree = "<group>"; };
        134CC7DF2C73283700EAEFB7 /* PavilionSearchVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PavilionSearchVC.xib; sourceTree = "<group>"; };
        137175C52C6C3C4700B38EF1 /* SourceHanSansCN-Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SourceHanSansCN-Regular.otf"; sourceTree = "<group>"; };
        137175C72C6C3C6D00B38EF1 /* Agenda-Light.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Agenda-Light.otf"; sourceTree = "<group>"; };
        137175C92C6C412A00B38EF1 /* BackgroundVoiceVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BackgroundVoiceVC.swift; sourceTree = "<group>"; };
@@ -194,6 +236,12 @@
        139C165F2C6A0FBB00A924D9 /* TestLeftRightCollectionViewFlowLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestLeftRightCollectionViewFlowLayout.swift; sourceTree = "<group>"; };
        139C16612C6A108A00A924D9 /* HomeRelaxBannerCCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeRelaxBannerCCell.swift; sourceTree = "<group>"; };
        139C16622C6A108A00A924D9 /* HomeRelaxBannerCCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeRelaxBannerCCell.xib; sourceTree = "<group>"; };
        13A659442C6F4B9E00F731FA /* CourseDetail_1_TCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CourseDetail_1_TCell.swift; sourceTree = "<group>"; };
        13A659452C6F4B9E00F731FA /* CourseDetail_1_TCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CourseDetail_1_TCell.xib; sourceTree = "<group>"; };
        13A659482C6F4F2D00F731FA /* CourseDetail_2_TCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CourseDetail_2_TCell.swift; sourceTree = "<group>"; };
        13A659492C6F4F2D00F731FA /* CourseDetail_2_TCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CourseDetail_2_TCell.xib; sourceTree = "<group>"; };
        13A6594C2C6F641100F731FA /* CourseDetail_2_Inner_TCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CourseDetail_2_Inner_TCell.swift; sourceTree = "<group>"; };
        13A6594D2C6F641100F731FA /* CourseDetail_2_Inner_TCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CourseDetail_2_Inner_TCell.xib; sourceTree = "<group>"; };
        13D256B32C6C68E7006FC2D7 /* ShareView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareView.swift; sourceTree = "<group>"; };
        13D256B62C6C68F8006FC2D7 /* ShareView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ShareView.xib; sourceTree = "<group>"; };
        13E0FBF82C6C8BDE009997AE /* CountdownChooseListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CountdownChooseListView.swift; sourceTree = "<group>"; };
@@ -203,6 +251,14 @@
        13EFCDBD2C6DCF5800B51AE6 /* HomeTyroGuideVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeTyroGuideVC.swift; sourceTree = "<group>"; };
        13EFCDBF2C6DD27A00B51AE6 /* PaymentOrderVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentOrderVC.swift; sourceTree = "<group>"; };
        13EFCDC02C6DD27A00B51AE6 /* PaymentOrderVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PaymentOrderVC.xib; sourceTree = "<group>"; };
        13FB6D7B2C6EE27100A0685D /* CourseOfficialItemCCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CourseOfficialItemCCell.swift; sourceTree = "<group>"; };
        13FB6D7C2C6EE27100A0685D /* CourseOfficialItemCCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CourseOfficialItemCCell.xib; sourceTree = "<group>"; };
        13FB6D7F2C6EED6000A0685D /* CourseMenuVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CourseMenuVC.swift; sourceTree = "<group>"; };
        13FB6D822C6EEFE900A0685D /* MenuListTCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuListTCell.swift; sourceTree = "<group>"; };
        13FB6D832C6EEFE900A0685D /* MenuListTCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MenuListTCell.xib; sourceTree = "<group>"; };
        13FB6D862C6EF9DE00A0685D /* CourseDetialVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CourseDetialVC.swift; sourceTree = "<group>"; };
        13FB6D892C6EFB4D00A0685D /* CourseDetailHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CourseDetailHeaderView.swift; sourceTree = "<group>"; };
        13FB6D8B2C6EFB5400A0685D /* CourseDetailHeaderView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CourseDetailHeaderView.xib; sourceTree = "<group>"; };
        257B6AA3157A71622E7EABC6 /* Pods-XQMuse.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-XQMuse.debug.xcconfig"; path = "Target Support Files/Pods-XQMuse/Pods-XQMuse.debug.xcconfig"; sourceTree = "<group>"; };
        627C13604519744922724D64 /* Pods_XQMuse.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_XQMuse.framework; sourceTree = BUILT_PRODUCTS_DIR; };
        B934C5A58089E8AEA47DCFE7 /* Pods-XQMuse.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-XQMuse.release.xcconfig"; path = "Target Support Files/Pods-XQMuse/Pods-XQMuse.release.xcconfig"; sourceTree = "<group>"; };
@@ -246,11 +302,24 @@
            path = VC;
            sourceTree = "<group>";
        };
        13334FD82C73219A00914086 /* CCell */ = {
            isa = PBXGroup;
            children = (
                13334FD92C7321BE00914086 /* PavilionItemCell.swift */,
                13334FDA2C7321BE00914086 /* PavilionItemCell.xib */,
            );
            path = CCell;
            sourceTree = "<group>";
        };
        134A452F2C6E0D3800538D78 /* VC */ = {
            isa = PBXGroup;
            children = (
                134A45302C6E0D6400538D78 /* CourseVCOfficalCommentVC.swift */,
                134A45342C6E0E0000538D78 /* CourseVCTeacherSpecialVC.swift */,
                13FB6D7F2C6EED6000A0685D /* CourseMenuVC.swift */,
                13FB6D862C6EF9DE00A0685D /* CourseDetialVC.swift */,
                130AA4A62C72F71700F20944 /* CourseDetialVideoVC.swift */,
                130AA4A72C72F71700F20944 /* CourseDetialVideoVC.xib */,
            );
            path = VC;
            sourceTree = "<group>";
@@ -260,8 +329,21 @@
            children = (
                134A45372C6E167D00538D78 /* CourseOfficalCommendTopCCell.swift */,
                134A45382C6E167D00538D78 /* CourseOfficalCommendTopCCell.xib */,
                13FB6D7B2C6EE27100A0685D /* CourseOfficialItemCCell.swift */,
                13FB6D7C2C6EE27100A0685D /* CourseOfficialItemCCell.xib */,
            );
            path = CCell;
            sourceTree = "<group>";
        };
        134CC7DD2C73282400EAEFB7 /* VC */ = {
            isa = PBXGroup;
            children = (
                134CC7DE2C73283700EAEFB7 /* PavilionSearchVC.swift */,
                134CC7DF2C73283700EAEFB7 /* PavilionSearchVC.xib */,
                13391E002C73334000B9513F /* PavilionDetailVC.swift */,
                13391E012C73334000B9513F /* PavilionDetailVC.xib */,
            );
            path = VC;
            sourceTree = "<group>";
        };
        137175C42C6C3C2100B38EF1 /* Fonts */ = {
@@ -446,6 +528,8 @@
        13985DC52C69E9260046B6DC /* Course */ = {
            isa = PBXGroup;
            children = (
                13FB6D882C6EFA8400A0685D /* View */,
                13FB6D812C6EEFD200A0685D /* TCell */,
                134A45362C6E165F00538D78 /* CCell */,
                134A452F2C6E0D3800538D78 /* VC */,
                13985DC62C69E9550046B6DC /* CourseVC.swift */,
@@ -456,7 +540,10 @@
        13985DC82C69E9940046B6DC /* Pavilion */ = {
            isa = PBXGroup;
            children = (
                134CC7DD2C73282400EAEFB7 /* VC */,
                13334FD82C73219A00914086 /* CCell */,
                13985DCB2C69E9FA0046B6DC /* PavilionVC.swift */,
                13334FD62C731E0B00914086 /* PavilionVC.xib */,
            );
            path = Pavilion;
            sourceTree = "<group>";
@@ -513,6 +600,35 @@
                13E0FBFA2C6C8BE3009997AE /* CountdownChooseListView.xib */,
                1377B4102C6DAA1900CF7CA5 /* ChooseOptView.swift */,
                1377B4122C6DAA2000CF7CA5 /* ChooseOptView.xib */,
                13334FD42C731C1B00914086 /* VideoView.swift */,
            );
            path = View;
            sourceTree = "<group>";
        };
        13FB6D812C6EEFD200A0685D /* TCell */ = {
            isa = PBXGroup;
            children = (
                13FB6D822C6EEFE900A0685D /* MenuListTCell.swift */,
                13FB6D832C6EEFE900A0685D /* MenuListTCell.xib */,
                13A659442C6F4B9E00F731FA /* CourseDetail_1_TCell.swift */,
                13A659452C6F4B9E00F731FA /* CourseDetail_1_TCell.xib */,
                13A659482C6F4F2D00F731FA /* CourseDetail_2_TCell.swift */,
                13A659492C6F4F2D00F731FA /* CourseDetail_2_TCell.xib */,
                13A6594C2C6F641100F731FA /* CourseDetail_2_Inner_TCell.swift */,
                13A6594D2C6F641100F731FA /* CourseDetail_2_Inner_TCell.xib */,
                1333DC772C72D8C400D8ACAE /* CourseDetail_3_TCell.swift */,
                1333DC782C72D8C400D8ACAE /* CourseDetail_3_TCell.xib */,
            );
            path = TCell;
            sourceTree = "<group>";
        };
        13FB6D882C6EFA8400A0685D /* View */ = {
            isa = PBXGroup;
            children = (
                13FB6D892C6EFB4D00A0685D /* CourseDetailHeaderView.swift */,
                13FB6D8B2C6EFB5400A0685D /* CourseDetailHeaderView.xib */,
                1333DC7B2C72E78F00D8ACAE /* CourseSendGiftView.swift */,
                1333DC7D2C72E7A500D8ACAE /* CourseSendGiftView.xib */,
            );
            path = View;
            sourceTree = "<group>";
@@ -596,19 +712,29 @@
            files = (
                13985DD42C69FC1F0046B6DC /* Home_Style_1_TCell.xib in Resources */,
                1377B4132C6DAA2000CF7CA5 /* ChooseOptView.xib in Resources */,
                13A6594E2C6F641100F731FA /* CourseDetail_2_Inner_TCell.xib in Resources */,
                130B765E2C6C4C33006371AF /* HomeItemListVC.xib in Resources */,
                1385E0072C6C558200AADB1F /* HomeRelaxBanner_2_CCell.xib in Resources */,
                132EB01D2C6B32B200990429 /* RegisterVC.xib in Resources */,
                1336EFA92C6DEC6B0075E070 /* PaymentOrderResultTopView.xib in Resources */,
                13334FDC2C7321BE00914086 /* PavilionItemCell.xib in Resources */,
                1333DC7E2C72E7A500D8ACAE /* CourseSendGiftView.xib in Resources */,
                137ABE352C6B3F64003A91C5 /* ForgotPasswordVC.xib in Resources */,
                13FB6D842C6EEFE900A0685D /* MenuListTCell.xib in Resources */,
                1377768E2C6AFD25004FF994 /* LoginVC.xib in Resources */,
                134CC7E02C73283700EAEFB7 /* PavilionSearchVC.xib in Resources */,
                130913EE2C6DE67E00418201 /* HomeRelaxBanner_2_1_CCell.xib in Resources */,
                130ED7E82C6AEF5900D0736E /* Home_Style_4_TCell.xib in Resources */,
                13391E022C73334000B9513F /* PavilionDetailVC.xib in Resources */,
                1377B4172C6DCC4300CF7CA5 /* Home_Style_4_Inner_1_CCell.xib in Resources */,
                13FB6D8C2C6EFB5400A0685D /* CourseDetailHeaderView.xib in Resources */,
                13985D9F2C69B2440046B6DC /* Assets.xcassets in Resources */,
                13EFCDC22C6DD27A00B51AE6 /* PaymentOrderVC.xib in Resources */,
                130AA4A82C72F71700F20944 /* CourseDetialVideoVC.xib in Resources */,
                13FB6D7D2C6EE27100A0685D /* CourseOfficialItemCCell.xib in Resources */,
                13D256B72C6C68F8006FC2D7 /* ShareView.xib in Resources */,
                13985DC32C69E0BF0046B6DC /* HomeTopMenuCCell.xib in Resources */,
                13A6594A2C6F4F2D00F731FA /* CourseDetail_2_TCell.xib in Resources */,
                139C165E2C6A0AC600A924D9 /* Home_Style_3_TCell.xib in Resources */,
                137175C82C6C3C6D00B38EF1 /* Agenda-Light.otf in Resources */,
                13985DA22C69B2440046B6DC /* Base in Resources */,
@@ -627,6 +753,9 @@
                130ED7ED2C6AF05C00D0736E /* Home_Style_4_Inner_CCell.xib in Resources */,
                137175C62C6C3C4700B38EF1 /* SourceHanSansCN-Regular.otf in Resources */,
                131E75C42C6B87C500E2C85D /* ForgotPasswordChangeVC.xib in Resources */,
                1333DC792C72D8C400D8ACAE /* CourseDetail_3_TCell.xib in Resources */,
                13A659462C6F4B9E00F731FA /* CourseDetail_1_TCell.xib in Resources */,
                13334FD72C731E0B00914086 /* PavilionVC.xib in Resources */,
                139C16642C6A108A00A924D9 /* HomeRelaxBannerCCell.xib in Resources */,
                13E0FBFB2C6C8BE3009997AE /* CountdownChooseListView.xib in Resources */,
                130B765A2C6C4963006371AF /* HomeRelaxVoiceCCell.xib in Resources */,
@@ -684,6 +813,7 @@
            isa = PBXSourcesBuildPhase;
            buildActionMask = 2147483647;
            files = (
                13FB6D872C6EF9DE00A0685D /* CourseDetialVC.swift in Sources */,
                13D256B42C6C68E7006FC2D7 /* ShareView.swift in Sources */,
                139466472C6B8E0200F6FB15 /* UpdatePhoneVC.swift in Sources */,
                137175CB2C6C412A00B38EF1 /* BackgroundVoiceVC.swift in Sources */,
@@ -691,6 +821,7 @@
                13985D962C69B2410046B6DC /* AppDelegate.swift in Sources */,
                13985DB02C69B7B00046B6DC /* BaseTabBarVC.swift in Sources */,
                13985DB22C69B7B00046B6DC /* TapBtn.swift in Sources */,
                13FB6D802C6EED6000A0685D /* CourseMenuVC.swift in Sources */,
                13985DBA2C69B8ED0046B6DC /* HomeVC.swift in Sources */,
                13985DAF2C69B7B00046B6DC /* BaseNav.swift in Sources */,
                134A45352C6E0E0000538D78 /* CourseVCTeacherSpecialVC.swift in Sources */,
@@ -700,14 +831,17 @@
                1377B4112C6DAA1900CF7CA5 /* ChooseOptView.swift in Sources */,
                1385E0062C6C558200AADB1F /* HomeRelaxBanner_2_CCell.swift in Sources */,
                130913EB2C6DE33200418201 /* PaymentOrderResultVC.swift in Sources */,
                13FB6D7E2C6EE27100A0685D /* CourseOfficialItemCCell.swift in Sources */,
                137ABE342C6B3F64003A91C5 /* ForgotPasswordVC.swift in Sources */,
                13EFCDBE2C6DCF5800B51AE6 /* HomeTyroGuideVC.swift in Sources */,
                134A45322C6E0D6400538D78 /* CourseVCOfficalCommentVC.swift in Sources */,
                139C16602C6A0FBB00A924D9 /* TestLeftRightCollectionViewFlowLayout.swift in Sources */,
                13985DC72C69E9550046B6DC /* CourseVC.swift in Sources */,
                1385E0022C6C4F1200AADB1F /* Services.swift in Sources */,
                13FB6D8A2C6EFB4D00A0685D /* CourseDetailHeaderView.swift in Sources */,
                13985DB82C69B80D0046B6DC /* Themes.swift in Sources */,
                13985DD02C69F2A80046B6DC /* HomeHeaderVC.swift in Sources */,
                130AA4A92C72F71700F20944 /* CourseDetialVideoVC.swift in Sources */,
                1336EFA52C6DEB550075E070 /* HoverHeaderFlowLayout.swift in Sources */,
                13985DB52C69B7DF0046B6DC /* Def.swift in Sources */,
                139228AF2C6B836B006F3CB6 /* Popup_1_View.swift in Sources */,
@@ -717,6 +851,8 @@
                13985DCC2C69E9FA0046B6DC /* PavilionVC.swift in Sources */,
                13985DC42C69E0BF0046B6DC /* HomeTopMenuCCell.swift in Sources */,
                1385E00A2C6C57A900AADB1F /* HomeItemDetailVC.swift in Sources */,
                1333DC7C2C72E78F00D8ACAE /* CourseSendGiftView.swift in Sources */,
                13391E032C73334000B9513F /* PavilionDetailVC.swift in Sources */,
                134783CF2C6C86EC0096C736 /* PlaySettingView.swift in Sources */,
                139C16592C6A053000A924D9 /* Home_Style_2_TCell.swift in Sources */,
                130B76592C6C4963006371AF /* HomeRelaxVoiceCCell.swift in Sources */,
@@ -725,22 +861,30 @@
                13985DD52C69FC1F0046B6DC /* Home_Style_1_TCell.swift in Sources */,
                132EB01C2C6B32B200990429 /* RegisterVC.swift in Sources */,
                13E0FBF92C6C8BDE009997AE /* CountdownChooseListView.swift in Sources */,
                13A659472C6F4B9E00F731FA /* CourseDetail_1_TCell.swift in Sources */,
                130ED7EE2C6AF05C00D0736E /* Home_Style_4_Inner_CCell.swift in Sources */,
                139C165D2C6A0AC600A924D9 /* Home_Style_3_TCell.swift in Sources */,
                1377B40F2C6D93FA00CF7CA5 /* CommentCommentHeaderView.swift in Sources */,
                1377B40C2C6D936A00CF7CA5 /* CommentUserInputContentTCell.swift in Sources */,
                1385DFFA2C6C4EBC00AADB1F /* RefreshModel.swift in Sources */,
                134CC7E12C73283700EAEFB7 /* PavilionSearchVC.swift in Sources */,
                139C16632C6A108A00A924D9 /* HomeRelaxBannerCCell.swift in Sources */,
                131E75C52C6B87C500E2C85D /* ForgotPasswordChangeVC.swift in Sources */,
                13A6594F2C6F641100F731FA /* CourseDetail_2_Inner_TCell.swift in Sources */,
                13334FD52C731C1B00914086 /* VideoView.swift in Sources */,
                130ED7E72C6AEF5900D0736E /* Home_Style_4_TCell.swift in Sources */,
                130913EF2C6DE67E00418201 /* HomeRelaxBanner_2_1_CCell.swift in Sources */,
                1333DC7A2C72D8C400D8ACAE /* CourseDetail_3_TCell.swift in Sources */,
                1300BD3C2C6DFB1C000BCA5E /* VIPCenterVC.swift in Sources */,
                1377B4162C6DCC4300CF7CA5 /* Home_Style_4_Inner_1_CCell.swift in Sources */,
                13E160212C6CB8930027F781 /* CommentListVC.swift in Sources */,
                137ABE3B2C6B6BDD003A91C5 /* ForgotPasswordInputCodeVC.swift in Sources */,
                130B765D2C6C4C33006371AF /* HomeItemListVC.swift in Sources */,
                1385E0002C6C4F1200AADB1F /* NetworkRequest.swift in Sources */,
                13334FDB2C7321BE00914086 /* PavilionItemCell.swift in Sources */,
                13A6594B2C6F4F2D00F731FA /* CourseDetail_2_TCell.swift in Sources */,
                1377768D2C6AFD25004FF994 /* LoginVC.swift in Sources */,
                13FB6D852C6EEFE900A0685D /* MenuListTCell.swift in Sources */,
            );
            runOnlyForDeploymentPostprocessing = 0;
        };
XQMuse/Assets.xcassets/Btns/btn_sendGift.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "btn_sendGift@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "btn_sendGift@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
XQMuse/Assets.xcassets/Btns/btn_sendGift.imageset/btn_sendGift@2x.png
XQMuse/Assets.xcassets/Btns/btn_sendGift.imageset/btn_sendGift@3x.png
XQMuse/Assets.xcassets/Icons/course_1.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "course_1@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "course_1@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
XQMuse/Assets.xcassets/Icons/course_1.imageset/course_1@2x.png
XQMuse/Assets.xcassets/Icons/course_1.imageset/course_1@3x.png
XQMuse/Assets.xcassets/Icons/course_2.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "course_2@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "course_2@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
XQMuse/Assets.xcassets/Icons/course_2.imageset/course_2@2x.png
XQMuse/Assets.xcassets/Icons/course_2.imageset/course_2@3x.png
XQMuse/Assets.xcassets/Icons/course_3.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "course_3@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "course_3@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
XQMuse/Assets.xcassets/Icons/course_3.imageset/course_3@2x.png
XQMuse/Assets.xcassets/Icons/course_3.imageset/course_3@3x.png
XQMuse/Assets.xcassets/Icons/course_4.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "course_4@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "course_4@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
XQMuse/Assets.xcassets/Icons/course_4.imageset/course_4@2x.png
XQMuse/Assets.xcassets/Icons/course_4.imageset/course_4@3x.png
XQMuse/Assets.xcassets/Icons/course_5.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "course_5@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "course_5@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
XQMuse/Assets.xcassets/Icons/course_5.imageset/course_5@2x.png
XQMuse/Assets.xcassets/Icons/course_5.imageset/course_5@3x.png
XQMuse/Assets.xcassets/Icons/course_6.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "course_6@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "course_6@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
XQMuse/Assets.xcassets/Icons/course_6.imageset/course_6@2x.png
XQMuse/Assets.xcassets/Icons/course_6.imageset/course_6@3x.png
XQMuse/Assets.xcassets/Icons/course_7.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "course_7@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "course_7@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
XQMuse/Assets.xcassets/Icons/course_7.imageset/course_7@2x.png
XQMuse/Assets.xcassets/Icons/course_7.imageset/course_7@3x.png
XQMuse/Assets.xcassets/Icons/course_8.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "course_8@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "course_8@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
XQMuse/Assets.xcassets/Icons/course_8.imageset/course_8@2x.png
XQMuse/Assets.xcassets/Icons/course_8.imageset/course_8@3x.png
XQMuse/Assets.xcassets/Icons/icon_local.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_local@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "icon_local@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
XQMuse/Assets.xcassets/Icons/icon_local.imageset/icon_local@2x.png
XQMuse/Assets.xcassets/Icons/icon_local.imageset/icon_local@3x.png
XQMuse/Assets.xcassets/Icons/icon_offline.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_offline@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "icon_offline@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
XQMuse/Assets.xcassets/Icons/icon_offline.imageset/icon_offline@2x.png
XQMuse/Assets.xcassets/Icons/icon_offline.imageset/icon_offline@3x.png
XQMuse/Assets.xcassets/Icons/icon_phone.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_phone@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "icon_phone@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
XQMuse/Assets.xcassets/Icons/icon_phone.imageset/icon_phone@2x.png
XQMuse/Assets.xcassets/Icons/icon_phone.imageset/icon_phone@3x.png
XQMuse/Assets.xcassets/Icons/icon_search.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_search@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "icon_search@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
XQMuse/Assets.xcassets/Icons/icon_search.imageset/icon_search@2x.png
XQMuse/Assets.xcassets/Icons/icon_search.imageset/icon_search@3x.png
XQMuse/Assets.xcassets/Icons/icon_time.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_time@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "icon_time@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
XQMuse/Assets.xcassets/Icons/icon_time.imageset/icon_time@2x.png
XQMuse/Assets.xcassets/Icons/icon_time.imageset/icon_time@3x.png
XQMuse/Assets.xcassets/Icons/icon_time_1.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_time_1@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "icon_time_1@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
XQMuse/Assets.xcassets/Icons/icon_time_1.imageset/icon_time_1@2x.png
XQMuse/Assets.xcassets/Icons/icon_time_1.imageset/icon_time_1@3x.png
XQMuse/Assets.xcassets/Icons/icon_user_1.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_user_1@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "icon_user_1@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
XQMuse/Assets.xcassets/Icons/icon_user_1.imageset/icon_user_1@2x.png
XQMuse/Assets.xcassets/Icons/icon_user_1.imageset/icon_user_1@3x.png
XQMuse/Assets.xcassets/Placeholder/bg_pavilion_top.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "bg_pavilion_top@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "bg_pavilion_top@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
XQMuse/Assets.xcassets/Placeholder/bg_pavilion_top.imageset/bg_pavilion_top@2x.png
XQMuse/Assets.xcassets/Placeholder/bg_pavilion_top.imageset/bg_pavilion_top@3x.png
XQMuse/Base/BaseNav.swift
@@ -12,11 +12,11 @@
                /// 需要透明Nav的VC
                private var lucencyVCs = [LoginVC.self]
                private var whiteStyleVCs = [HomeItemDetailVC.self]
                private var whiteStyleVCs = [HomeItemDetailVC.self,CourseDetialVC.self,HomeItemDetailVC.self,CourseDetialVideoVC.self,PavilionDetailVC.self]
                open override func viewDidLoad() {
                                super.viewDidLoad()
                                self.navigationBar.barTintColor = .white
                                self.navigationBar.barTintColor = .red
                                self.navigationBar.tintColor = UIColor.black
                                self.navigationBar.shadowImage = UIImage()
                                self.navigationBar.isTranslucent = true
@@ -55,7 +55,7 @@
                                let status = lucencyVCs.contains(where: {$0 == viewController.classForCoder})
                                if (navigationController.viewControllers.count == 1 || status){
                                                if #available(iOS 15.0, *) {
                                                                navigationBar.standardAppearance.backgroundColor = .white
                                                                navigationBar.standardAppearance.backgroundColor = .clear
                                                                navigationBar.scrollEdgeAppearance?.backgroundColor = .clear
                                                }else{
                                                                navigationBar.setBackgroundImage(UIImage(), for: .default)
XQMuse/Base/BaseVC.swift
@@ -44,7 +44,6 @@
                                                                navigationItem.leftBarButtonItem = UIBarButtonItem.jq_creat(image: nav_back_img, target: self, alignment:.left, action: #selector(backItemEvent)).item
                                                }
                                }
                }
                func setRx(){
XQMuse/Root/Course/CCell/CourseOfficalCommendTopCCell.swift
@@ -6,12 +6,59 @@
//
import UIKit
import JQTools
class CourseOfficalCommendTopCCell: UICollectionViewCell {
                @IBOutlet weak var view_bannerContentView: UIView!
                @IBOutlet weak var collectionView: UICollectionView!
                private var titleItems = [TitleItem]()
                private var clouse:((Int)->Void)?
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
                                collectionView.delegate = self
                                collectionView.dataSource = self
                                collectionView.isScrollEnabled = false
                                collectionView.register(UINib(nibName: "CourseOfficialItemCCell", bundle: nil), forCellWithReuseIdentifier: "_CourseOfficialItemCCell")
    }
                func setTitles(_ items:[TitleItem]){
                                titleItems = items
                                collectionView.reloadData()
                }
                func clickAtClouse(_ clouse:@escaping (Int)->Void){
                                self.clouse = clouse
                }
}
extension CourseOfficalCommendTopCCell:UICollectionViewDelegate & UICollectionViewDataSource{
                func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
                                return titleItems.count
                }
                func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
                                let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_CourseOfficialItemCCell", for: indexPath) as! CourseOfficialItemCCell
                                cell.setItem(titleItems[indexPath.row])
                                return cell
                }
                func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
                                clouse?(indexPath.row)
                }
}
extension CourseOfficalCommendTopCCell:UICollectionViewDelegateFlowLayout{
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
                                let w = JQ_ScreenW / 4
                                return CGSize(width: w, height: 101.25)
                }
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
                                return 5
                }
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
                                return 0
                }
}
XQMuse/Root/Course/CCell/CourseOfficalCommendTopCCell.xib
@@ -5,21 +5,63 @@
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="_CourseOfficalCommendTopCCell" id="gTV-IL-0wX" customClass="CourseOfficalCommendTopCCell" customModule="XQMuse" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="328" height="269"/>
            <rect key="frame" x="0.0" y="0.0" width="328" height="408"/>
            <autoresizingMask key="autoresizingMask"/>
            <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
                <rect key="frame" x="0.0" y="0.0" width="328" height="269"/>
                <rect key="frame" x="0.0" y="0.0" width="328" height="408"/>
                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                <subviews>
                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="LpV-bY-BWS">
                        <rect key="frame" x="0.0" y="0.0" width="328" height="171"/>
                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                        <constraints>
                            <constraint firstAttribute="width" secondItem="LpV-bY-BWS" secondAttribute="height" multiplier="1:0.5217" id="VfO-Ti-5ef"/>
                        </constraints>
                    </view>
                    <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="IAR-Fq-op8">
                        <rect key="frame" x="0.0" y="181" width="328" height="207"/>
                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                        <constraints>
                            <constraint firstAttribute="height" constant="207" id="JM2-hK-TGn"/>
                        </constraints>
                        <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="KBa-lQ-RAV">
                            <size key="itemSize" width="128" height="128"/>
                            <size key="headerReferenceSize" width="0.0" height="0.0"/>
                            <size key="footerReferenceSize" width="0.0" height="0.0"/>
                            <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
                        </collectionViewFlowLayout>
                    </collectionView>
                </subviews>
            </view>
            <viewLayoutGuide key="safeArea" id="ZTg-uK-7eu"/>
            <size key="customSize" width="328" height="269"/>
            <point key="canvasLocation" x="293.12977099236639" y="97.535211267605632"/>
            <color key="backgroundColor" red="0.94117647058823528" green="0.94117647058823528" blue="0.94117647058823528" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
            <constraints>
                <constraint firstAttribute="bottom" secondItem="IAR-Fq-op8" secondAttribute="bottom" priority="750" constant="25.5" id="XqK-na-fDy"/>
                <constraint firstItem="LpV-bY-BWS" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="Yd8-Jr-VVH"/>
                <constraint firstItem="IAR-Fq-op8" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="cfc-xx-VGM"/>
                <constraint firstItem="IAR-Fq-op8" firstAttribute="top" secondItem="LpV-bY-BWS" secondAttribute="bottom" constant="10" id="da4-2G-4zL"/>
                <constraint firstAttribute="trailing" secondItem="LpV-bY-BWS" secondAttribute="trailing" id="iHF-Rx-5et"/>
                <constraint firstAttribute="trailing" secondItem="IAR-Fq-op8" secondAttribute="trailing" id="kg6-QP-VL9"/>
                <constraint firstItem="LpV-bY-BWS" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" id="uom-LS-wPM"/>
            </constraints>
            <size key="customSize" width="328" height="408"/>
            <connections>
                <outlet property="collectionView" destination="IAR-Fq-op8" id="B6V-Mt-S1J"/>
                <outlet property="view_bannerContentView" destination="LpV-bY-BWS" id="AyT-5Y-Vaq"/>
            </connections>
            <point key="canvasLocation" x="293.12977099236639" y="146.47887323943664"/>
        </collectionViewCell>
    </objects>
    <resources>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
XQMuse/Root/Course/CCell/CourseOfficialItemCCell.swift
New file
@@ -0,0 +1,29 @@
//
//  CourseOfficialItemCCell.swift
//  XQMuse
//
//  Created by 无故事王国 on 2024/8/16.
//
import UIKit
class CourseOfficialItemCCell: UICollectionViewCell {
                @IBOutlet weak var img_cover: UIImageView!
                @IBOutlet weak var label_title: UILabel!
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }
                func setItem(_ item:TitleItem){
                                if let localImage = item.coverImage{
                                                img_cover.image = UIImage(named: localImage)
                                }
                                label_title.text = item.title
                }
}
XQMuse/Root/Course/CCell/CourseOfficialItemCCell.xib
New file
@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="_CourseOfficialItemCCell" id="gTV-IL-0wX" customClass="CourseOfficialItemCCell" customModule="XQMuse" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="114" height="109"/>
            <autoresizingMask key="autoresizingMask"/>
            <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
                <rect key="frame" x="0.0" y="0.0" width="114" height="109"/>
                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                <subviews>
                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="course_1" translatesAutoresizingMaskIntoConstraints="NO" id="D7q-iI-B0n">
                        <rect key="frame" x="39.666666666666671" y="29" width="34.666666666666671" height="31.666666666666671"/>
                    </imageView>
                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eyG-jG-ONh">
                        <rect key="frame" x="51.666666666666664" y="77" width="10.666666666666664" height="14.333333333333329"/>
                        <fontDescription key="fontDescription" type="system" pointSize="11"/>
                        <nil key="textColor"/>
                        <nil key="highlightedColor"/>
                    </label>
                </subviews>
            </view>
            <viewLayoutGuide key="safeArea" id="ZTg-uK-7eu"/>
            <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
            <constraints>
                <constraint firstItem="eyG-jG-ONh" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" constant="77" id="0WR-EQ-L1f"/>
                <constraint firstItem="D7q-iI-B0n" firstAttribute="centerX" secondItem="ZTg-uK-7eu" secondAttribute="centerX" id="FBJ-g1-8N6"/>
                <constraint firstItem="D7q-iI-B0n" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" constant="29" id="IfT-we-B99"/>
                <constraint firstItem="eyG-jG-ONh" firstAttribute="centerX" secondItem="D7q-iI-B0n" secondAttribute="centerX" id="VBt-Ee-fVM"/>
            </constraints>
            <size key="customSize" width="114" height="109"/>
            <connections>
                <outlet property="img_cover" destination="D7q-iI-B0n" id="rE5-4z-7nC"/>
                <outlet property="label_title" destination="eyG-jG-ONh" id="MMf-hZ-xMm"/>
            </connections>
            <point key="canvasLocation" x="129.7709923664122" y="41.197183098591552"/>
        </collectionViewCell>
    </objects>
    <resources>
        <image name="course_1" width="34.666667938232422" height="31.666666030883789"/>
    </resources>
</document>
XQMuse/Root/Course/TCell/CourseDetail_1_TCell.swift
New file
@@ -0,0 +1,28 @@
//
//  CourseDetail_1_TCell.swift
//  XQMuse
//
//  Created by 无故事王国 on 2024/8/16.
//
import UIKit
import WebKit
class CourseDetail_1_TCell: UITableViewCell {
                @IBOutlet weak var label_title: UILabel!
                @IBOutlet weak var webView: WKWebView!
                override func awakeFromNib() {
        super.awakeFromNib()
                                backgroundColor = .clear
                                selectionStyle = .none
                                webView.scrollView.isScrollEnabled = false
                                webView.scrollView.backgroundColor = .clear
                                webView.isOpaque = false
    }
                func setContent(title:String,content:String){
                                label_title.text = title
                }
}
XQMuse/Root/Course/TCell/CourseDetail_1_TCell.xib
New file
@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="_CourseDetail_1_TCell" rowHeight="183" id="KGk-i7-Jjw" customClass="CourseDetail_1_TCell" customModule="XQMuse" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="501" height="183"/>
            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
            <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" ambiguous="YES" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
                <rect key="frame" x="0.0" y="0.0" width="501" height="183"/>
                <autoresizingMask key="autoresizingMask"/>
                <subviews>
                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="课程介绍" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Lg9-70-w3n">
                        <rect key="frame" x="21.666666666666668" y="35" width="61.333333333333329" height="14"/>
                        <constraints>
                            <constraint firstAttribute="height" constant="14" id="WNQ-mw-uOi"/>
                        </constraints>
                        <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
                        <color key="textColor" red="0.15686274509803921" green="0.15686274509803921" blue="0.15686274509803921" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <nil key="highlightedColor"/>
                    </label>
                    <wkWebView contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="WYV-JQ-E3S">
                        <rect key="frame" x="0.0" y="68.666666666666671" width="501" height="100.00000000000001"/>
                        <constraints>
                            <constraint firstAttribute="height" constant="100" id="hfa-qQ-TpS"/>
                        </constraints>
                        <wkWebViewConfiguration key="configuration">
                            <audiovisualMediaTypes key="mediaTypesRequiringUserActionForPlayback" none="YES"/>
                            <wkPreferences key="preferences"/>
                        </wkWebViewConfiguration>
                    </wkWebView>
                </subviews>
                <constraints>
                    <constraint firstItem="Lg9-70-w3n" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="35" id="4D5-on-wj2"/>
                    <constraint firstItem="WYV-JQ-E3S" firstAttribute="top" secondItem="Lg9-70-w3n" secondAttribute="bottom" constant="19.5" id="Ar0-7c-kQM"/>
                    <constraint firstAttribute="trailing" secondItem="WYV-JQ-E3S" secondAttribute="trailing" id="BSc-yJ-F5G"/>
                    <constraint firstItem="WYV-JQ-E3S" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" id="Mbt-TS-KCB"/>
                    <constraint firstItem="Lg9-70-w3n" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="21.5" id="dJv-7a-n9J"/>
                    <constraint firstAttribute="bottom" secondItem="WYV-JQ-E3S" secondAttribute="bottom" id="ys9-aS-J2j"/>
                </constraints>
            </tableViewCellContentView>
            <connections>
                <outlet property="label_title" destination="Lg9-70-w3n" id="NPf-Sa-PgL"/>
                <outlet property="webView" destination="WYV-JQ-E3S" id="wJi-nk-vgm"/>
            </connections>
            <point key="canvasLocation" x="200.76335877862596" y="68.661971830985919"/>
        </tableViewCell>
    </objects>
</document>
XQMuse/Root/Course/TCell/CourseDetail_2_Inner_TCell.swift
New file
@@ -0,0 +1,24 @@
//
//  CourseDetail_2_Inner_TCell.swift
//  XQMuse
//
//  Created by 无故事王国 on 2024/8/16.
//
import UIKit
import JQTools
class CourseDetail_2_Inner_TCell: UITableViewCell {
                @IBOutlet weak var btn_study: UIButton!
                override func awakeFromNib() {
        super.awakeFromNib()
                                selectionStyle = .none
    }
                @IBAction func studyAction(_ sender: Any) {
                                let vc = CourseDetialVideoVC()
                                JQ_currentViewController().jq_push(vc: vc)
                }
}
XQMuse/Root/Course/TCell/CourseDetail_2_Inner_TCell.xib
New file
@@ -0,0 +1,119 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="_CourseDetail_2_Inner_TCell" rowHeight="106" id="KGk-i7-Jjw" customClass="CourseDetail_2_Inner_TCell" customModule="XQMuse" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="403" height="106"/>
            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
            <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
                <rect key="frame" x="0.0" y="0.0" width="403" height="106"/>
                <autoresizingMask key="autoresizingMask"/>
                <subviews>
                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="1" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uL3-AT-OQF">
                        <rect key="frame" x="24" y="43.333333333333336" width="7.3333333333333321" height="19.333333333333336"/>
                        <fontDescription key="fontDescription" type="system" pointSize="16"/>
                        <color key="textColor" red="0.66666666666666663" green="0.66666666666666663" blue="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <nil key="highlightedColor"/>
                    </label>
                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="awd-gM-ZRD">
                        <rect key="frame" x="52.666666666666671" y="18" width="249.33333333333331" height="17"/>
                        <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                        <nil key="textColor"/>
                        <nil key="highlightedColor"/>
                    </label>
                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="q5a-cH-u74">
                        <rect key="frame" x="312" y="17" width="70.666666666666686" height="29"/>
                        <color key="backgroundColor" red="0.54117647058823526" green="0.68235294117647061" blue="0.396078431372549" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstAttribute="width" constant="70.5" id="NJh-Q0-nvT"/>
                            <constraint firstAttribute="height" constant="29" id="jwy-kp-iQ4"/>
                        </constraints>
                        <fontDescription key="fontDescription" type="system" pointSize="14"/>
                        <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                        <state key="normal" title="去学习"/>
                        <userDefinedRuntimeAttributes>
                            <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                            <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                <real key="value" value="14.5"/>
                            </userDefinedRuntimeAttribute>
                        </userDefinedRuntimeAttributes>
                        <connections>
                            <action selector="studyAction:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="WCv-9q-rxx"/>
                        </connections>
                    </button>
                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_time" translatesAutoresizingMaskIntoConstraints="NO" id="wpH-E1-rC0">
                        <rect key="frame" x="52.666666666666664" y="44" width="11.333333333333336" height="11.666666666666664"/>
                        <constraints>
                            <constraint firstAttribute="width" constant="11.5" id="efn-rA-ldt"/>
                            <constraint firstAttribute="height" constant="11.5" id="hd2-sF-7w1"/>
                        </constraints>
                    </imageView>
                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="00:00" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bXU-MP-QyS">
                        <rect key="frame" x="70.666666666666671" y="42.666666666666664" width="33" height="14"/>
                        <fontDescription key="fontDescription" type="system" weight="medium" pointSize="11"/>
                        <color key="textColor" red="0.80392156862745101" green="0.80392156862745101" blue="0.80392156862745101" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <nil key="highlightedColor"/>
                    </label>
                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_user_1" translatesAutoresizingMaskIntoConstraints="NO" id="oSc-rc-16x">
                        <rect key="frame" x="117.66666666666667" y="44" width="11.333333333333329" height="11.666666666666664"/>
                        <constraints>
                            <constraint firstAttribute="height" constant="11.5" id="eaV-6e-0Ih"/>
                            <constraint firstAttribute="width" constant="11.5" id="n0Q-jC-eem"/>
                        </constraints>
                    </imageView>
                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="00:00" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="c0R-vF-UBG">
                        <rect key="frame" x="135.66666666666666" y="42.666666666666664" width="33" height="14"/>
                        <fontDescription key="fontDescription" type="system" weight="medium" pointSize="11"/>
                        <color key="textColor" red="0.80392156859999997" green="0.80392156859999997" blue="0.80392156859999997" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <nil key="highlightedColor"/>
                    </label>
                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3UC-Wb-cQG">
                        <rect key="frame" x="21.666666666666657" y="0.0" width="360" height="0.66666666666666663"/>
                        <color key="backgroundColor" red="0.81568627450980391" green="0.81568627450980391" blue="0.81568627450980391" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstAttribute="height" constant="0.5" id="TWp-MD-4TS"/>
                        </constraints>
                    </view>
                </subviews>
                <constraints>
                    <constraint firstItem="wpH-E1-rC0" firstAttribute="top" secondItem="awd-gM-ZRD" secondAttribute="bottom" constant="9" id="0Zc-X2-H51"/>
                    <constraint firstItem="wpH-E1-rC0" firstAttribute="leading" secondItem="awd-gM-ZRD" secondAttribute="leading" id="0wg-uJ-4Np"/>
                    <constraint firstAttribute="trailing" secondItem="3UC-Wb-cQG" secondAttribute="trailing" constant="21.5" id="1mS-SD-ZJa"/>
                    <constraint firstItem="oSc-rc-16x" firstAttribute="centerY" secondItem="wpH-E1-rC0" secondAttribute="centerY" id="50x-R4-xTR"/>
                    <constraint firstItem="oSc-rc-16x" firstAttribute="leading" secondItem="bXU-MP-QyS" secondAttribute="trailing" constant="14" id="ADG-0O-Rvk"/>
                    <constraint firstItem="3UC-Wb-cQG" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="21.5" id="H2m-u0-Pyd"/>
                    <constraint firstItem="awd-gM-ZRD" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="52.5" id="JnA-Zo-1fO"/>
                    <constraint firstItem="c0R-vF-UBG" firstAttribute="centerY" secondItem="wpH-E1-rC0" secondAttribute="centerY" id="JxL-JH-kCT"/>
                    <constraint firstItem="uL3-AT-OQF" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="24" id="OPx-IH-LD6"/>
                    <constraint firstAttribute="trailing" secondItem="q5a-cH-u74" secondAttribute="trailing" constant="20.5" id="One-yw-xva"/>
                    <constraint firstItem="bXU-MP-QyS" firstAttribute="leading" secondItem="wpH-E1-rC0" secondAttribute="trailing" constant="6.5" id="QTP-JI-ZzO"/>
                    <constraint firstItem="q5a-cH-u74" firstAttribute="leading" secondItem="awd-gM-ZRD" secondAttribute="trailing" constant="10" id="QgM-tO-y5H"/>
                    <constraint firstItem="c0R-vF-UBG" firstAttribute="leading" secondItem="oSc-rc-16x" secondAttribute="trailing" constant="6.5" id="bIm-0D-Nqo"/>
                    <constraint firstItem="3UC-Wb-cQG" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="bf7-gf-i6X"/>
                    <constraint firstItem="bXU-MP-QyS" firstAttribute="centerY" secondItem="wpH-E1-rC0" secondAttribute="centerY" id="eBP-b0-aqj"/>
                    <constraint firstItem="awd-gM-ZRD" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="18" id="ra5-Wa-c88"/>
                    <constraint firstItem="q5a-cH-u74" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="17" id="scr-Mv-FTW"/>
                    <constraint firstItem="uL3-AT-OQF" firstAttribute="centerY" secondItem="H2p-sc-9uM" secondAttribute="centerY" id="wiC-Us-lKn"/>
                    <constraint firstItem="c0R-vF-UBG" firstAttribute="centerY" secondItem="oSc-rc-16x" secondAttribute="centerY" id="xdz-Vq-XrJ"/>
                </constraints>
            </tableViewCellContentView>
            <viewLayoutGuide key="safeArea" id="njF-e1-oar"/>
            <connections>
                <outlet property="btn_study" destination="q5a-cH-u74" id="vg6-WV-mdc"/>
            </connections>
            <point key="canvasLocation" x="148.85496183206106" y="41.549295774647888"/>
        </tableViewCell>
    </objects>
    <resources>
        <image name="icon_time" width="11.666666984558105" height="11.666666984558105"/>
        <image name="icon_user_1" width="10" height="10.666666984558105"/>
    </resources>
</document>
XQMuse/Root/Course/TCell/CourseDetail_2_TCell.swift
New file
@@ -0,0 +1,56 @@
//
//  CourseDetail_2_TCell.swift
//  XQMuse
//
//  Created by 无故事王国 on 2024/8/16.
//
import UIKit
class CourseDetail_2_TCell: UITableViewCell {
                @IBOutlet weak var tableView: UITableView!
                @IBOutlet weak var cons_tableHei: NSLayoutConstraint!
//                private(set) var clouse:((IndexPath)->Void)?
                override func awakeFromNib() {
        super.awakeFromNib()
                                backgroundColor = .clear
                                selectionStyle = .none
                                tableView.delegate = self
                                tableView.dataSource = self
                                tableView.isScrollEnabled = false
                                tableView.backgroundColor = UIColor(hexString: "f6f6f6")
                                tableView.separatorStyle = .none
                                tableView.register(UINib(nibName: "CourseDetail_2_Inner_TCell", bundle: nil), forCellReuseIdentifier: "_CourseDetail_2_Inner_TCell")
                                cons_tableHei.constant = 70.5 * 5
    }
//                func selectAt(_ clouse:@escaping (IndexPath)->Void){
//                                if self.clouse == nil{
//                                                self.clouse = clouse
//                                }
//                }
}
extension CourseDetail_2_TCell:UITableViewDelegate & UITableViewDataSource{
                func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
//                                clouse?(indexPath)
                }
                func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
                                return 5
                }
                func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
                                let cell = tableView.dequeueReusableCell(withIdentifier: "_CourseDetail_2_Inner_TCell", for: indexPath) as! CourseDetail_2_Inner_TCell
                                cell.backgroundColor = .clear
                                return cell
                }
                func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
                                return 70.5
                }
}
XQMuse/Root/Course/TCell/CourseDetail_2_TCell.xib
New file
@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" rowHeight="279" id="KGk-i7-Jjw" customClass="CourseDetail_2_TCell" customModule="XQMuse" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="395" height="279"/>
            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
            <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
                <rect key="frame" x="0.0" y="0.0" width="395" height="279"/>
                <autoresizingMask key="autoresizingMask"/>
                <subviews>
                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="课程目录" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="EsS-2x-ooJ">
                        <rect key="frame" x="21.666666666666668" y="35" width="61.333333333333329" height="114"/>
                        <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
                        <color key="textColor" red="0.15686274510000001" green="0.15686274510000001" blue="0.15686274510000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <nil key="highlightedColor"/>
                    </label>
                    <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="Rxb-3O-BKc">
                        <rect key="frame" x="0.0" y="179" width="395" height="100"/>
                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                        <constraints>
                            <constraint firstAttribute="height" constant="100" id="3OA-Kk-g6l"/>
                        </constraints>
                    </tableView>
                </subviews>
                <constraints>
                    <constraint firstItem="EsS-2x-ooJ" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="35" id="Hlp-1k-lzl"/>
                    <constraint firstItem="EsS-2x-ooJ" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="21.5" id="jO0-ZH-hJ9"/>
                    <constraint firstItem="Rxb-3O-BKc" firstAttribute="top" secondItem="EsS-2x-ooJ" secondAttribute="bottom" constant="30" id="jV2-gZ-CKK"/>
                    <constraint firstAttribute="bottom" secondItem="Rxb-3O-BKc" secondAttribute="bottom" id="mI0-cL-zMy"/>
                    <constraint firstAttribute="trailing" secondItem="Rxb-3O-BKc" secondAttribute="trailing" id="uzm-vX-xsu"/>
                    <constraint firstItem="Rxb-3O-BKc" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" id="wS8-Bj-4Mf"/>
                </constraints>
            </tableViewCellContentView>
            <connections>
                <outlet property="cons_tableHei" destination="3OA-Kk-g6l" id="B2s-Et-Ehh"/>
                <outlet property="tableView" destination="Rxb-3O-BKc" id="7KR-ba-eEY"/>
            </connections>
            <point key="canvasLocation" x="148.85496183206106" y="102.46478873239437"/>
        </tableViewCell>
    </objects>
    <resources>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
XQMuse/Root/Course/TCell/CourseDetail_3_TCell.swift
New file
@@ -0,0 +1,55 @@
//
//  CourseDetail_3_TCell.swift
//  XQMuse
//
//  Created by 无故事王国 on 2024/8/19.
//
import UIKit
import JQTools
class CourseDetail_3_TCell: UITableViewCell {
                @IBOutlet weak var collectionView: UICollectionView!
                @IBOutlet weak var cons_hei: NSLayoutConstraint!
                private let CellW  = (JQ_ScreenW - 21.5 * 2 - 13.5) / 2
                private let CellH = ((JQ_ScreenW - 21.5 * 2 - 13.5) / 2) * 1.313
                override func awakeFromNib() {
                                super.awakeFromNib()
                                backgroundColor = .clear
                                selectionStyle = .none
                                collectionView.backgroundColor = .clear
                                collectionView.delegate = self
                                collectionView.dataSource = self
                                collectionView.isScrollEnabled = false
                                collectionView.contentInset = UIEdgeInsets(top: 0, left: 21.5, bottom: 0, right: 21.5)
                                collectionView.register(UINib(nibName: "HomeRelaxBanner_2_CCell", bundle: nil), forCellWithReuseIdentifier: "_HomeRelaxBanner_2_CCell")
                                cons_hei.constant = ceil(5.0 / 2.0) * CellH + floor(5.0 / 2.0) * 13.5
                }
}
extension CourseDetail_3_TCell:UICollectionViewDelegate & UICollectionViewDataSource{
                func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
                                return 5
                }
                func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
                                let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_HomeRelaxBanner_2_CCell", for: indexPath) as! HomeRelaxBanner_2_CCell
                                cell.backgroundColor = .jq_randomColor
                                return cell
                }
}
extension CourseDetail_3_TCell:UICollectionViewDelegateFlowLayout{
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
                                return 13.5
                }
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
                                return 13.5
                }
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
                                return CGSize(width: CellW, height: CellH)
                }
}
XQMuse/Root/Course/TCell/CourseDetail_3_TCell.xib
New file
@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="_CourseDetail_3_TCell" rowHeight="347" id="KGk-i7-Jjw" customClass="CourseDetail_3_TCell" customModule="XQMuse" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="455" height="347"/>
            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
            <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
                <rect key="frame" x="0.0" y="0.0" width="455" height="347"/>
                <autoresizingMask key="autoresizingMask"/>
                <subviews>
                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="相关课程" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0G9-B5-m4l">
                        <rect key="frame" x="21.666666666666668" y="35" width="61.333333333333329" height="14.666666666666664"/>
                        <constraints>
                            <constraint firstAttribute="height" constant="14.5" id="COr-dp-lCx"/>
                        </constraints>
                        <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
                        <color key="textColor" red="0.15686274510000001" green="0.15686274510000001" blue="0.15686274510000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <nil key="highlightedColor"/>
                    </label>
                    <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="nEq-ZY-3mu">
                        <rect key="frame" x="0.0" y="75.666666666666686" width="455" height="200"/>
                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                        <constraints>
                            <constraint firstAttribute="height" constant="200" id="YsJ-NH-WUu"/>
                        </constraints>
                        <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="1sc-XC-5ho">
                            <size key="itemSize" width="128" height="128"/>
                            <size key="headerReferenceSize" width="0.0" height="0.0"/>
                            <size key="footerReferenceSize" width="0.0" height="0.0"/>
                            <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
                        </collectionViewFlowLayout>
                    </collectionView>
                </subviews>
                <constraints>
                    <constraint firstAttribute="trailing" secondItem="nEq-ZY-3mu" secondAttribute="trailing" id="BVg-Jh-pTP"/>
                    <constraint firstAttribute="bottom" secondItem="nEq-ZY-3mu" secondAttribute="bottom" priority="750" id="HAE-y2-F8d"/>
                    <constraint firstItem="nEq-ZY-3mu" firstAttribute="top" secondItem="0G9-B5-m4l" secondAttribute="bottom" constant="26" id="HoT-g7-b14"/>
                    <constraint firstItem="0G9-B5-m4l" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="35" id="b6S-pF-HGc"/>
                    <constraint firstItem="nEq-ZY-3mu" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" id="jTh-Jx-7Fk"/>
                    <constraint firstItem="0G9-B5-m4l" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="21.5" id="ube-k6-sLV"/>
                </constraints>
            </tableViewCellContentView>
            <connections>
                <outlet property="collectionView" destination="nEq-ZY-3mu" id="mbu-ON-vFu"/>
                <outlet property="cons_hei" destination="YsJ-NH-WUu" id="vYm-tG-6Ho"/>
            </connections>
            <point key="canvasLocation" x="171.75572519083968" y="96.83098591549296"/>
        </tableViewCell>
    </objects>
    <resources>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
XQMuse/Root/Course/TCell/MenuListTCell.swift
New file
@@ -0,0 +1,19 @@
//
//  MenuListTCell.swift
//  XQMuse
//
//  Created by 无故事王国 on 2024/8/16.
//
import UIKit
class MenuListTCell: UITableViewCell {
                @IBOutlet weak var view_line: UIView!
                @IBOutlet weak var label_title: UILabel!
                override func awakeFromNib() {
        super.awakeFromNib()
                                selectionStyle = .none
    }
}
XQMuse/Root/Course/TCell/MenuListTCell.xib
New file
@@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="_MenuListTCell" rowHeight="63" id="KGk-i7-Jjw" customClass="MenuListTCell" customModule="XQMuse" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="294" height="63"/>
            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
            <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
                <rect key="frame" x="0.0" y="0.0" width="294" height="63"/>
                <autoresizingMask key="autoresizingMask"/>
                <subviews>
                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="BTu-gK-KIz">
                        <rect key="frame" x="0.0" y="23.666666666666671" width="2.6666666666666665" height="15.666666666666664"/>
                        <color key="backgroundColor" red="0.54117647058823526" green="0.68235294117647061" blue="0.396078431372549" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstAttribute="width" constant="2.5" id="bjt-4z-odo"/>
                            <constraint firstAttribute="height" constant="15.5" id="xfz-AE-Xm3"/>
                        </constraints>
                        <userDefinedRuntimeAttributes>
                            <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                            <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                <real key="value" value="1.25"/>
                            </userDefinedRuntimeAttribute>
                        </userDefinedRuntimeAttributes>
                    </view>
                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xYs-QB-GeD">
                        <rect key="frame" x="21" y="23" width="39" height="17"/>
                        <fontDescription key="fontDescription" type="system" weight="heavy" pointSize="14"/>
                        <color key="textColor" red="0.54117647059999996" green="0.68235294120000001" blue="0.39607843139999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <nil key="highlightedColor"/>
                    </label>
                </subviews>
                <constraints>
                    <constraint firstItem="xYs-QB-GeD" firstAttribute="leading" secondItem="BTu-gK-KIz" secondAttribute="trailing" constant="18.5" id="Imt-xS-zG1"/>
                    <constraint firstItem="xYs-QB-GeD" firstAttribute="centerY" secondItem="BTu-gK-KIz" secondAttribute="centerY" id="MQR-Mf-AHI"/>
                    <constraint firstItem="BTu-gK-KIz" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" id="WTi-Pe-9vh"/>
                    <constraint firstItem="BTu-gK-KIz" firstAttribute="centerY" secondItem="H2p-sc-9uM" secondAttribute="centerY" id="o4W-Nr-5Gn"/>
                </constraints>
            </tableViewCellContentView>
            <connections>
                <outlet property="label_title" destination="xYs-QB-GeD" id="gab-e7-0xP"/>
                <outlet property="view_line" destination="BTu-gK-KIz" id="OEM-Sf-xAZ"/>
            </connections>
            <point key="canvasLocation" x="61.068702290076331" y="27.112676056338028"/>
        </tableViewCell>
    </objects>
</document>
XQMuse/Root/Course/VC/CourseDetialVC.swift
New file
@@ -0,0 +1,308 @@
//
//  CourseDetialVC.swift
//  XQMuse
//
//  Created by 无故事王国 on 2024/8/16.
//
import UIKit
import JQTools
import SPPageMenu
import QMUIKit
enum CourseDetialStyle{
                case style1 //有视频
                case style2 //无视频
}
class CourseDetialVC: BaseVC {
                private var tableView:UITableView?
                private var headerView = CourseDetailHeaderView.jq_loadNibView()
                private var barStyle:UIStatusBarStyle = .lightContent
                private var scrollShowCell = false
                private var currentShowIndex:IndexPath = IndexPath(row: 0, section: 0)
                var isAnimationing = false
                private var style:CourseDetialStyle = .style1
                private(set) var pageMenu:SPPageMenu = {
                                let pageMenu = SPPageMenu(frame: .zero, trackerStyle: .line)
                                // 追踪线
                                pageMenu.trackerWidth = 27.5
                                pageMenu.setTrackerHeight(11, cornerRadius:0)
                                pageMenu.trackerFollowingMode = .always
                                pageMenu.contentInset = UIEdgeInsets(top: 0, left: 19.5, bottom: 15, right: 19.5)
                                pageMenu.setItems(["简介","章节","相关推荐"], selectedItemIndex: 0)
                                pageMenu.backgroundColor = UIColor(hexString: "#F6F6F6")
                                pageMenu.tracker.image = UIImage(named: "icon_unline")
                                pageMenu.tracker.backgroundColor = .clear
                                // 分割线
                                pageMenu.dividingLine.backgroundColor = .clear
                                pageMenu.dividingLineHeight = 1
                                // item
                                pageMenu.spacing = 27.0
                                pageMenu.permutationWay = .scrollAdaptContent
                                // 字体
                                pageMenu.selectedItemTitleFont = UIFont.systemFont(ofSize: 18, weight: .bold)
                                pageMenu.unSelectedItemTitleFont = UIFont.systemFont(ofSize: 15, weight: .bold)
                                // 颜色
                                pageMenu.selectedItemTitleColor = UIColor(hexStr: "#282828")
                                pageMenu.unSelectedItemTitleColor = UIColor(hexStr: "#AAAAAA")
                                return pageMenu
                }()
                override func viewWillAppear(_ animated: Bool) {
                                super.viewWillAppear(animated)
                                (navigationItem.leftBarButtonItem?.customView as? UIButton)?.setImage(UIImage(named: "btn_back")?.withTintColor(.white), for: .normal)
                                navigationController?.navigationBar.scrollEdgeAppearance?.backgroundColor = .clear
                                navigationController?.navigationBar.standardAppearance.backgroundColor = .clear
                }
                init(courseSytle:CourseDetialStyle) {
                                super.init(nibName: nil, bundle: nil)
                                self.style = courseSytle
                }
                required init?(coder: NSCoder) {
                                fatalError("init(coder:) has not been implemented")
                }
    override func viewDidLoad() {
        super.viewDidLoad()
                                title = "课程详情"
                                if style == .style1{
                                                pageMenu.setItems(["简介","章节","相关推荐"], selectedItemIndex: 0)
                                }else{
                                                pageMenu.setItems(["简介"], selectedItemIndex: 0)
                                }
    }
                override func setUI() {
                                super.setUI()
                                pageMenu.delegate = self
                                tableView = UITableView(frame: .zero, style: .plain)
                                tableView!.contentInsetAdjustmentBehavior = .never
                                tableView!.separatorStyle = .none
                                tableView!.delegate = self
                                tableView!.dataSource = self
                                tableView!.showsVerticalScrollIndicator = false
                                if #available(iOS 15.0, *) {
                                                tableView!.sectionHeaderTopPadding = 0
                                }
                                tableView!.backgroundColor = UIColor(hexString: "#f6f6f6")
                                tableView!.register(UINib(nibName: "CourseDetail_1_TCell", bundle: nil), forCellReuseIdentifier: "_CourseDetail_1_TCell")
                                tableView!.register(UINib(nibName: "CourseDetail_2_TCell", bundle: nil), forCellReuseIdentifier: "_CourseDetail_2_TCell")
                                tableView!.register(UINib(nibName: "CourseDetail_3_TCell", bundle: nil), forCellReuseIdentifier: "_CourseDetail_3_TCell")
                                view.addSubview(tableView!)
                                tableView!.snp.makeConstraints { make in
                                                make.edges.equalToSuperview()
                                }
                                DispatchQueue.main.async {
                                                self.headerView.frame = CGRect(x: 0, y: 0, width: JQ_ScreenW, height: 413)
                                                self.tableView!.tableHeaderView = self.headerView
                                }
                                setFootView()
                }
                private func setFootView(){
                                let footView = UIView()
                                footView.backgroundColor = .white
                                view.addSubview(footView)
                                footView.snp.makeConstraints { make in
                                                make.left.right.bottom.equalToSuperview()
                                                make.height.equalTo(84)
                                }
                                let giftBtn = QMUIButton(type: .custom)
                                giftBtn.imagePosition = .left
                                giftBtn.spacingBetweenImageAndTitle = 7.5
                                giftBtn.setTitleColor(UIColor(hexString: "#464646"), for: .normal)
                                giftBtn.setImage(UIImage(named: "btn_sendGift"), for: .normal)
                                giftBtn.setTitle("赠送好友", for: .normal)
                                giftBtn.addTarget(self, action: #selector(sendGift(_:)), for: .touchUpInside)
                                giftBtn.titleLabel?.font = UIFont.systemFont(ofSize: 14, weight: .bold)
                                footView.addSubview(giftBtn)
                                giftBtn.snp.makeConstraints { make in
                                                make.left.equalTo(26)
                                                make.top.equalTo(26.5)
                                }
                                let studyBtn = QMUIButton(type: .custom)
                                studyBtn.setTitleColor(UIColor.white, for: .normal)
                                studyBtn.setTitle("    立即学习    ", for: .normal)
                                studyBtn.addTarget(self, action: #selector(handleAction(_:)), for: .touchUpInside)
                                studyBtn.cornerRadius = 17
                                studyBtn.titleLabel?.font = UIFont.systemFont(ofSize: 16.57, weight: .bold)
                                studyBtn.setBackgroundColor(color: UIColor(hexString: "#8AAE65")!, forState: .normal)
                                footView.addSubview(studyBtn)
                                studyBtn.snp.makeConstraints { make in
                                                make.right.equalTo(-20)
                                                make.centerY.equalTo(giftBtn)
                                                make.height.equalTo(34)
                                }
                }
                @objc func handleAction(_ btn:QMUIButton){
                }
                @objc func sendGift(_ btn:QMUIButton){
                                CourseSendGiftView.show {
                                                let vc = PaymentOrderVC()
                                                self.push(vc: vc)
                                }
                }
                override var preferredStatusBarStyle: UIStatusBarStyle{
                                return barStyle
                }
}
extension CourseDetialVC:UITableViewDataSource{
                func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
                                if style == .style1{
                                                return 3
                                }else if style == .style2{
                                                return 1
                                }else{
                                                return 0
                                }
                }
                func numberOfSections(in tableView: UITableView) -> Int {
                                return 1
                }
                func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
                                if indexPath.row == 0 || indexPath.row == 1{
                                                return UITableView.automaticDimension
                                }
                                return 770.736
                }
                func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
                                if indexPath.row == 0{
                                                let cell = tableView.dequeueReusableCell(withIdentifier: "_CourseDetail_1_TCell") as! CourseDetail_1_TCell
                                                cell.backgroundColor = UIColor(hexString: "#f6f6f6")
                                                return cell
                                }
                                if indexPath.row == 1{
                                                let cell = tableView.dequeueReusableCell(withIdentifier: "_CourseDetail_2_TCell") as! CourseDetail_2_TCell
                                                cell.backgroundColor = UIColor(hexString: "#f6f6f6")
                                                return cell
                                }
                                if indexPath.row == 2{
                                                let cell = tableView.dequeueReusableCell(withIdentifier: "_CourseDetail_3_TCell") as! CourseDetail_3_TCell
                                                cell.backgroundColor = UIColor(hexString: "#f6f6f6")
                                                return cell
                                }
                                var cell = tableView.dequeueReusableCell(withIdentifier: "cell")
                                if cell == nil{
                                                cell = UITableViewCell(style: .value1, reuseIdentifier: "cell")
                                }
                                cell?.backgroundColor = .jq_randomColor
                                return cell!
                }
                func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
                                var header = tableView.dequeueReusableHeaderFooterView(withIdentifier: "header")
                                if header == nil{
                                                header = UITableViewHeaderFooterView(reuseIdentifier: "header")
                                                header?.addSubview(pageMenu)
                                                pageMenu.snp.makeConstraints { make in
                                                                make.edges.equalTo(header!)
                                                }
                                }
                                return header
                }
                func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
                                return 73.5
                }
}
extension CourseDetialVC:UITableViewDelegate{
}
extension CourseDetialVC:UIScrollViewDelegate{
                func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
                                isAnimationing = false
                }
                func scrollViewDidScroll(_ scrollView: UIScrollView) {
                                let v = min(scrollView.contentOffset.y / JQ_NavBarHeight, 1)
                                navigationController?.navigationBar.standardAppearance.backgroundColor = .white.withAlphaComponent(v)
                                if v > 0{
                                                (navigationItem.leftBarButtonItem?.customView as? UIButton)?.setImage(UIImage(named: "btn_back")?.withTintColor(.black.withAlphaComponent(v)), for: .normal)
                                                self.navigationController?.navigationBar.titleTextAttributes = [.foregroundColor:Def_NavFontColor.withAlphaComponent(v),.font:Def_NavFont]
                                                barStyle = .darkContent
                                }else{
                                                (navigationItem.leftBarButtonItem?.customView as? UIButton)?.setImage(UIImage(named: "btn_back")?.withTintColor(.white), for: .normal)
                                                self.navigationController?.navigationBar.titleTextAttributes = [.foregroundColor:UIColor.white,.font:Def_NavFont]
                                }
                                if v == 1{
                                                barStyle = .darkContent
                                                setNeedsStatusBarAppearanceUpdate()
                                }else{
                                                barStyle = .lightContent
                                                setNeedsStatusBarAppearanceUpdate()
                                }
                                if let table = scrollView as? UITableView{
                                                if v > 0{
                                                                table.contentInset = UIEdgeInsets(top: JQ_NavBarHeight + 9, left: 0, bottom: 118, right: 0)
                                                }else{
                                                                table.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 118, right: 0)
                                                }
                                }
                                let offSetY = scrollView.contentOffset.y + CGRectGetHeight(scrollView.frame) / 2;
                                if let currentIndex = tableView?.indexPathForRow(at: CGPoint(x: 0, y: offSetY)){
                                                print(scrollView.isDragging)
                                                if !isAnimationing{
                                                if currentShowIndex != currentIndex{
                                                                currentShowIndex = currentIndex
                                                                                pageMenu.selectedItemIndex = currentIndex.row
                                                                }
                                                }
                                }
                }
}
extension CourseDetialVC:SPPageMenuDelegate{
                func pageMenu(_ pageMenu: SPPageMenu, itemSelectedAt index: Int) {
                                if currentShowIndex != IndexPath(row: index, section: 0){
                                                currentShowIndex =  IndexPath(row: index, section: 0)
                                                if !(tableView?.isDragging ?? true){
                                                                isAnimationing = true
                                                                tableView?.scrollToRow(at: currentShowIndex, at: .top, animated: true)
                                                }
                                }
                }
}
XQMuse/Root/Course/VC/CourseDetialVideoVC.swift
New file
@@ -0,0 +1,61 @@
//
//  CourseDetialVideoVC.swift
//  XQMuse
//
//  Created by 无故事王国 on 2024/8/19.
//
import UIKit
class CourseDetialVideoVC: BaseVC {
                @IBOutlet weak var tableView: UITableView!
                override func viewWillAppear(_ animated: Bool) {
                                super.viewWillAppear(animated)
                                (navigationItem.leftBarButtonItem?.customView as? UIButton)?.setImage(UIImage(named: "btn_back")?.withTintColor(.white), for: .normal)
                }
    override func viewDidLoad() {
        super.viewDidLoad()
                                title = "课程详情"
                                tableView.separatorStyle = .none
                                tableView.delegate = self
                                tableView.dataSource = self
                                tableView.showsVerticalScrollIndicator = false
                                if #available(iOS 15.0, *) {
                                                tableView.sectionHeaderTopPadding = 0
                                }
                                tableView.register(UINib(nibName: "CourseDetail_2_Inner_TCell", bundle: nil), forCellReuseIdentifier: "_CourseDetail_2_Inner_TCell")
    }
                override var preferredStatusBarStyle: UIStatusBarStyle{
                                return .lightContent
                }
}
extension CourseDetialVideoVC:UITableViewDataSource{
                func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
                            return 10
                }
                func numberOfSections(in tableView: UITableView) -> Int {
                                return 1
                }
                func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
                                return 69.5
                }
                func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
                                let cell = tableView.dequeueReusableCell(withIdentifier: "_CourseDetail_2_Inner_TCell") as! CourseDetail_2_Inner_TCell
                                return cell
                }
}
extension CourseDetialVideoVC:UITableViewDelegate{
}
XQMuse/Root/Course/VC/CourseDetialVideoVC.xib
New file
@@ -0,0 +1,84 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="CourseDetialVideoVC" customModule="XQMuse" customModuleProvider="target">
            <connections>
                <outlet property="tableView" destination="9tI-Cr-xM8" id="y8l-vs-uxu"/>
                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
            </connections>
        </placeholder>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
            <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="a5v-5f-tro">
                    <rect key="frame" x="0.0" y="0.0" width="393" height="314.33333333333331"/>
                    <subviews>
                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="demo_bg" translatesAutoresizingMaskIntoConstraints="NO" id="EGK-xl-ywV">
                            <rect key="frame" x="0.0" y="0.0" width="393" height="314.33333333333331"/>
                        </imageView>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstAttribute="trailing" secondItem="EGK-xl-ywV" secondAttribute="trailing" id="7EB-ci-VAK"/>
                        <constraint firstItem="EGK-xl-ywV" firstAttribute="top" secondItem="a5v-5f-tro" secondAttribute="top" id="Btv-Ot-ZHF"/>
                        <constraint firstAttribute="bottom" secondItem="EGK-xl-ywV" secondAttribute="bottom" id="Upc-4k-kA9"/>
                        <constraint firstAttribute="width" secondItem="a5v-5f-tro" secondAttribute="height" multiplier="1:0.8" id="gMO-7v-G2E"/>
                        <constraint firstItem="EGK-xl-ywV" firstAttribute="leading" secondItem="a5v-5f-tro" secondAttribute="leading" id="iVr-lI-tV7"/>
                    </constraints>
                </view>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="hWZ-tE-Oeu">
                    <rect key="frame" x="0.0" y="314.33333333333331" width="393" height="82"/>
                    <subviews>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="课程目录" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4ak-gq-iBH">
                            <rect key="frame" x="20.666666666666668" y="45.666666666666686" width="61.333333333333329" height="18"/>
                            <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
                            <color key="textColor" red="0.15686274509803921" green="0.15686274509803921" blue="0.15686274509803921" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            <nil key="highlightedColor"/>
                        </label>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstAttribute="height" constant="82" id="HIS-7C-zS3"/>
                        <constraint firstAttribute="bottom" secondItem="4ak-gq-iBH" secondAttribute="bottom" constant="18.329999999999998" id="cCa-ou-vSq"/>
                        <constraint firstItem="4ak-gq-iBH" firstAttribute="leading" secondItem="hWZ-tE-Oeu" secondAttribute="leading" constant="20.5" id="qS4-R4-YXE"/>
                    </constraints>
                </view>
                <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="9tI-Cr-xM8">
                    <rect key="frame" x="0.0" y="396.33333333333326" width="393" height="421.66666666666674"/>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                </tableView>
            </subviews>
            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
            <constraints>
                <constraint firstItem="hWZ-tE-Oeu" firstAttribute="top" secondItem="a5v-5f-tro" secondAttribute="bottom" id="0GD-ZB-m7D"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="9tI-Cr-xM8" secondAttribute="trailing" id="8Rn-S4-LPe"/>
                <constraint firstItem="hWZ-tE-Oeu" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="B44-Pj-deb"/>
                <constraint firstItem="9tI-Cr-xM8" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="CZK-sW-wPa"/>
                <constraint firstItem="a5v-5f-tro" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="EgI-eU-ICh"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="9tI-Cr-xM8" secondAttribute="bottom" id="GGs-yG-CZR"/>
                <constraint firstItem="9tI-Cr-xM8" firstAttribute="top" secondItem="hWZ-tE-Oeu" secondAttribute="bottom" id="U4d-7p-WoM"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="a5v-5f-tro" secondAttribute="trailing" id="WN7-hi-1eN"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="hWZ-tE-Oeu" secondAttribute="trailing" id="iu3-20-0gs"/>
                <constraint firstItem="a5v-5f-tro" firstAttribute="top" secondItem="i5M-Pr-FkT" secondAttribute="top" id="xv8-jD-2j4"/>
            </constraints>
            <point key="canvasLocation" x="16" y="20"/>
        </view>
    </objects>
    <resources>
        <image name="demo_bg" width="621" height="1064"/>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
XQMuse/Root/Course/VC/CourseMenuVC.swift
New file
@@ -0,0 +1,123 @@
//
//  CourseMenuVC.swift
//  XQMuse
//
//  Created by 无故事王国 on 2024/8/16.
//
import UIKit
import JQTools
class CourseMenuVC: BaseVC {
                private var tableView:UITableView!
                private var collectionView:UICollectionView!
                private var titleItems = [TitleItem]()
                private var selectIndex:Int = 0
    override func viewDidLoad() {
        super.viewDidLoad()
                                title = "全部课程"
                                titleItems.append(TitleItem(title: "会员专区"))
                                titleItems.append(TitleItem(title: "免费专区"))
                                titleItems.append(TitleItem(title: "付费专区"))
                                titleItems.append(TitleItem(title: "线下课程"))
                                titleItems.append(TitleItem(title: "水晶疗愈"))
    }
                override func setUI() {
                                super.setUI()
                                view.backgroundColor = UIColor.white
                                tableView = UITableView(frame: .zero, style: .plain)
                                tableView.backgroundColor = UIColor(hexString: "#f6f6f6")
                                tableView.separatorStyle = .none
                                tableView.isScrollEnabled = false
                                tableView.register(UINib(nibName: "MenuListTCell", bundle: nil), forCellReuseIdentifier: "_MenuListTCell")
                                tableView.delegate = self
                                tableView.dataSource = self
                                view.addSubview(tableView)
                                tableView.snp.makeConstraints { make in
                                                make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top)
                                                make.left.bottom.equalToSuperview()
                                                make.width.equalTo(JQ_ScreenW * 0.2487)
                                }
                                let layout = UICollectionViewFlowLayout()
                                collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
                                collectionView.delegate = self
                                collectionView.dataSource = self
                                collectionView.showsVerticalScrollIndicator = false
                                collectionView.register(UINib(nibName: "HomeRelaxBanner_2_CCell", bundle: nil), forCellWithReuseIdentifier: "_HomeRelaxBanner_2_CCell")
                                collectionView.contentInset = UIEdgeInsets(top: 34, left: 21, bottom: 0, right: 21)
                                view.addSubview(collectionView)
                                collectionView.snp.makeConstraints { make in
                                                make.left.equalTo(tableView.snp.right)
                                                make.right.equalToSuperview()
                                                make.top.bottom.equalTo(tableView)
                                }
                }
}
extension CourseMenuVC:UITableViewDelegate & UITableViewDataSource{
                func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
                                selectIndex = indexPath.row
                                tableView.reloadData()
                }
                func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
                                let cell = tableView.dequeueReusableCell(withIdentifier: "_MenuListTCell", for: indexPath) as! MenuListTCell
                                cell.backgroundColor = .clear
                                cell.view_line.isHidden = indexPath.row != selectIndex
                                cell.label_title.text = titleItems[indexPath.row].title
                                cell.label_title.textColor = indexPath.row == selectIndex ? UIColor(hexString: "#8AAE65") : UIColor(hexString: "#5C5C5C")
                                return cell
                }
                func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
                                return titleItems.count
                }
                func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
                                return 53
                }
}
extension CourseMenuVC:UICollectionViewDelegate & UICollectionViewDataSource{
                func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
                                if indexPath.row == 0{
                                                let vc = CourseDetialVC(courseSytle: .style1)
                                                push(vc: vc)
                                }else{
                                                let vc = CourseDetialVC(courseSytle: .style2)
                                                push(vc: vc)
                                }
                }
                func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
                                let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_HomeRelaxBanner_2_CCell", for: indexPath) as! HomeRelaxBanner_2_CCell
                                cell.backgroundColor = .jq_randomColor
                                return cell
                }
                func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
                                return 2
                }
}
extension CourseMenuVC:UICollectionViewDelegateFlowLayout{
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
                                return 10
                }
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
                                return 10
                }
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
                                let w = ((JQ_ScreenW - 70) * (1 - 0.2487)) / 2
                                return CGSize(width: w, height: w * 1.313)
                }
}
XQMuse/Root/Course/VC/CourseVCOfficalCommentVC.swift
@@ -12,12 +12,23 @@
                private var collectionView:UICollectionView!
                private var titleItems = [TitleItem]()
                private var subTitleItems = [TitleItem]()
                override func viewDidLoad() {
                                super.viewDidLoad()
                                titleItems.append(TitleItem(title: "新手冥想指南", subTitle: "Meditation guide"))
                                titleItems.append(TitleItem(title: "推荐课程", subTitle: "与内心的宁静与喜悦入睡"))
                                subTitleItems.append(TitleItem(title: "会员专区",coverImage: "course_1"))
                                subTitleItems.append(TitleItem(title: "免费专区",coverImage: "course_2"))
                                subTitleItems.append(TitleItem(title: "付费专区",coverImage: "course_3"))
                                subTitleItems.append(TitleItem(title: "线下课程",coverImage: "course_4"))
                                subTitleItems.append(TitleItem(title: "疗愈",coverImage: "course_5"))
                                subTitleItems.append(TitleItem(title: "关系",coverImage: "course_6"))
                                subTitleItems.append(TitleItem(title: "财富",coverImage: "course_7"))
                                subTitleItems.append(TitleItem(title: "分类",coverImage: "course_8"))
                }
                override func setUI() {
@@ -41,6 +52,11 @@
extension CourseVCOfficalCommentVC:UICollectionViewDelegate & UICollectionViewDataSource{
                func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
                                let vc = CourseDetialVC(courseSytle: .style1)
                                JQ_currentViewController().jq_push(vc: vc)
                }
                func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
                                if kind == UICollectionView.elementKindSectionHeader{
@@ -56,7 +72,12 @@
                                if indexPath.section == 0{
                                                let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_CourseOfficalCommendTopCCell", for: indexPath) as! CourseOfficalCommendTopCCell
                                                cell.backgroundColor = .jq_randomColor
                                                cell.setTitles(subTitleItems)
                                                cell.clickAtClouse { index in
                                                                let vc = CourseMenuVC()
                                                                vc.hidesBottomBarWhenPushed = true
                                                                JQ_currentNavigationController().pushViewController(vc, animated: true)
                                                }
                                                return cell
                                }
@@ -80,7 +101,9 @@
extension CourseVCOfficalCommentVC:UICollectionViewDelegateFlowLayout{
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
                                if indexPath.section == 0{
                                                return CGSize(width: JQ_ScreenW, height: 421)
                                                let h = ceil(subTitleItems.count.double / 4.0) * 101.25 + floor(subTitleItems.count.double / 4.0) * 5 + 208.5
                                                return CGSize(width: JQ_ScreenW, height: h)
                                }
                                let w = (JQ_ScreenW - 19 * 2 - 14) / 2
XQMuse/Root/Course/VC/CourseVCTeacherSpecialVC.swift
@@ -9,22 +9,86 @@
import JQTools
class CourseVCTeacherSpecialVC: BaseVC {
                private var tableView:UITableView?
                private var headerView:VideoView!
    override func viewDidLoad() {
        super.viewDidLoad()
                                view.backgroundColor = .jq_randomColor
    }
    
    /*
    // MARK: - Navigation
    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destination.
        // Pass the selected object to the new view controller.
                override func setUI() {
                                super.setUI()
                                tableView = UITableView(frame: .zero, style: .plain)
                                tableView!.contentInsetAdjustmentBehavior = .never
                                tableView!.separatorStyle = .none
                                tableView!.delegate = self
                                tableView!.dataSource = self
                                tableView?.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 20, right: 0)
                                tableView!.showsVerticalScrollIndicator = false
                                if #available(iOS 15.0, *) {
                                                tableView!.sectionHeaderTopPadding = 0
    }
    */
                                tableView!.backgroundColor = UIColor(hexString: "#f6f6f6")
                                tableView!.register(UINib(nibName: "CourseDetail_1_TCell", bundle: nil), forCellReuseIdentifier: "_CourseDetail_1_TCell")
                                tableView!.register(UINib(nibName: "CourseDetail_3_TCell", bundle: nil), forCellReuseIdentifier: "_CourseDetail_3_TCell")
                                view.addSubview(tableView!)
                                tableView!.snp.makeConstraints { make in
                                                make.edges.equalToSuperview()
                                }
                                DispatchQueue.main.async {
                                                self.headerView = VideoView()
                                                self.headerView.frame = CGRect(x: 0, y: 0, width: JQ_ScreenW, height: JQ_ScreenW * 0.56)
                                                self.tableView!.tableHeaderView = self.headerView
                                }
                }
}
extension CourseVCTeacherSpecialVC:UITableViewDataSource{
                func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
                            return 2
                }
                func numberOfSections(in tableView: UITableView) -> Int {
                                return 1
                }
                func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
                                if indexPath.row == 0 || indexPath.row == 1{
                                                return UITableView.automaticDimension
                                }
                                return 770.736
                }
                func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
                                if indexPath.row == 0{
                                                let cell = tableView.dequeueReusableCell(withIdentifier: "_CourseDetail_1_TCell") as! CourseDetail_1_TCell
                                                cell.backgroundColor = UIColor(hexString: "#f6f6f6")
                                                cell.setContent(title: "导师简介", content: "")
                                                return cell
                                }
                                if indexPath.row == 1{
                                                let cell = tableView.dequeueReusableCell(withIdentifier: "_CourseDetail_3_TCell") as! CourseDetail_3_TCell
                                                cell.backgroundColor = UIColor(hexString: "#f6f6f6")
                                                return cell
                                }
                                var cell = tableView.dequeueReusableCell(withIdentifier: "cell")
                                if cell == nil{
                                                cell = UITableViewCell(style: .value1, reuseIdentifier: "cell")
                                }
                                return cell!
                }
                func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
                                return 73.5
                }
}
extension CourseVCTeacherSpecialVC:UITableViewDelegate{
}
XQMuse/Root/Course/View/CourseDetailHeaderView.swift
New file
@@ -0,0 +1,17 @@
//
//  CourseDetailHeaderView.swift
//  XQMuse
//
//  Created by 无故事王国 on 2024/8/16.
//
import UIKit
import JQTools
class CourseDetailHeaderView: UIView,JQNibView{
                @IBOutlet weak var icon: UIImageView!
                override func awakeFromNib() {
                                super.awakeFromNib()
                }
}
XQMuse/Root/Course/View/CourseDetailHeaderView.xib
New file
@@ -0,0 +1,90 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="CourseDetailHeaderView" customModule="XQMuse" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="364" height="413"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="demo_bg" translatesAutoresizingMaskIntoConstraints="NO" id="3FR-3L-eGU">
                    <rect key="frame" x="0.0" y="0.0" width="364" height="291.33333333333331"/>
                    <constraints>
                        <constraint firstAttribute="width" secondItem="3FR-3L-eGU" secondAttribute="height" multiplier="1:0.8" id="dKc-G0-qUl"/>
                    </constraints>
                </imageView>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="AMf-zP-hoy">
                    <rect key="frame" x="0.0" y="291.33333333333331" width="364" height="99.333333333333314"/>
                    <subviews>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CgZ-Jh-uGm">
                            <rect key="frame" x="20.666666666666664" y="20" width="17.666666666666664" height="23"/>
                            <fontDescription key="fontDescription" type="boldSystem" pointSize="19"/>
                            <color key="textColor" red="0.15686274509803921" green="0.15686274509803921" blue="0.15686274509803921" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="导师 --" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="DbG-SW-sik">
                            <rect key="frame" x="304.33333333333331" y="24.333333333333371" width="39.333333333333314" height="14.333333333333336"/>
                            <fontDescription key="fontDescription" type="system" pointSize="12"/>
                            <color key="textColor" red="0.27058823529411763" green="0.27058823529411763" blue="0.27058823529411763" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_use_small" translatesAutoresizingMaskIntoConstraints="NO" id="QZb-OD-zkm">
                            <rect key="frame" x="20.666666666666668" y="63.333333333333364" width="10" height="10.666666666666664"/>
                            <constraints>
                                <constraint firstAttribute="width" constant="10" id="Oim-LL-682"/>
                                <constraint firstAttribute="height" constant="10.5" id="UW0-AR-Xhg"/>
                            </constraints>
                        </imageView>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="101人已加入学习" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0I9-CV-ojJ">
                            <rect key="frame" x="35.666666666666664" y="62.666666666666686" width="78.666666666666686" height="12"/>
                            <fontDescription key="fontDescription" type="system" pointSize="10"/>
                            <color key="textColor" red="0.80392156862745101" green="0.80392156862745101" blue="0.80392156862745101" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            <nil key="highlightedColor"/>
                        </label>
                    </subviews>
                    <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                    <constraints>
                        <constraint firstItem="QZb-OD-zkm" firstAttribute="leading" secondItem="CgZ-Jh-uGm" secondAttribute="leading" id="9m2-IA-FFN"/>
                        <constraint firstAttribute="height" constant="99.5" id="LcG-qp-bba"/>
                        <constraint firstAttribute="trailing" secondItem="DbG-SW-sik" secondAttribute="trailing" constant="20.5" id="dRM-2S-Gf9"/>
                        <constraint firstItem="0I9-CV-ojJ" firstAttribute="leading" secondItem="QZb-OD-zkm" secondAttribute="trailing" constant="5" id="e2U-HD-qip"/>
                        <constraint firstItem="CgZ-Jh-uGm" firstAttribute="top" secondItem="AMf-zP-hoy" secondAttribute="top" constant="20" id="f9p-jH-KwJ"/>
                        <constraint firstItem="CgZ-Jh-uGm" firstAttribute="leading" secondItem="AMf-zP-hoy" secondAttribute="leading" constant="20.5" id="fzO-TU-hyZ"/>
                        <constraint firstItem="QZb-OD-zkm" firstAttribute="top" secondItem="CgZ-Jh-uGm" secondAttribute="bottom" constant="20.5" id="iWI-lW-jIf"/>
                        <constraint firstItem="QZb-OD-zkm" firstAttribute="centerY" secondItem="0I9-CV-ojJ" secondAttribute="centerY" id="pCH-gF-id3"/>
                        <constraint firstItem="DbG-SW-sik" firstAttribute="centerY" secondItem="CgZ-Jh-uGm" secondAttribute="centerY" id="rIW-tx-0kQ"/>
                    </constraints>
                </view>
            </subviews>
            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
            <constraints>
                <constraint firstItem="AMf-zP-hoy" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="5hu-fm-fpJ"/>
                <constraint firstItem="AMf-zP-hoy" firstAttribute="top" secondItem="3FR-3L-eGU" secondAttribute="bottom" id="HCP-1R-mx8"/>
                <constraint firstAttribute="trailing" secondItem="3FR-3L-eGU" secondAttribute="trailing" id="KJx-ha-rYc"/>
                <constraint firstItem="3FR-3L-eGU" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="KjP-Qt-mZS"/>
                <constraint firstAttribute="trailing" secondItem="AMf-zP-hoy" secondAttribute="trailing" id="QnO-1B-SP7"/>
                <constraint firstAttribute="bottom" secondItem="AMf-zP-hoy" secondAttribute="bottom" priority="750" id="TyS-Df-byM"/>
                <constraint firstItem="3FR-3L-eGU" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="fEh-oE-o3e"/>
            </constraints>
            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
            <connections>
                <outlet property="icon" destination="QZb-OD-zkm" id="C8w-ga-BSc"/>
            </connections>
            <point key="canvasLocation" x="59.541984732824424" y="-98.239436619718319"/>
        </view>
    </objects>
    <resources>
        <image name="demo_bg" width="621" height="1064"/>
        <image name="icon_use_small" width="10" height="10.666666984558105"/>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
XQMuse/Root/Course/View/CourseSendGiftView.swift
New file
@@ -0,0 +1,63 @@
//
//  CourseSendGiftView.swift
//  XQMuse
//
//  Created by 无故事王国 on 2024/8/19.
//
import UIKit
import JQTools
class CourseSendGiftView: UIView,JQNibView{
                @IBOutlet weak var btn_complete: UIButton!
                @IBOutlet weak var view_container: UIView!
                @IBOutlet weak var label_price: UILabel!
                @IBOutlet weak var cons_bottom: NSLayoutConstraint!
                private var clouse:(()->Void)?
                override func awakeFromNib() {
                                super.awakeFromNib()
                                cons_bottom.constant = -JQ_ScreenW
                                alpha = 0
                                layoutIfNeeded()
                }
                static func show(_ clouse:@escaping()->Void){
                                let view = CourseSendGiftView.jq_loadNibView()
                                sceneDelegate?.window?.addSubview(view)
                                view.clouse = clouse
                                view.cons_bottom.constant = 0
                                UIView.animate(withDuration: 0.4) {
                                                view.alpha = 1
                                                view.layoutIfNeeded()
                                }
                }
                override func layoutSubviews() {
                                super.layoutSubviews()
                                btn_complete.jq_gradientNibColor(colorArr: [UIColor(hexStr: "#8EA47A").cgColor,UIColor(hexStr: "#AFCA98").cgColor], cornerRadius: 18.5)
                }
                @IBAction func completeAction(_ sender: UIButton) {
                                cons_bottom.constant = -JQ_ScreenW
                                UIView.animate(withDuration: 0.4) {
                                                self.alpha = 0
                                                self.layoutIfNeeded()
                                }completion: { _ in
                                                self.removeFromSuperview()
                                                self.clouse?()
                                }
                }
                @IBAction func cancelAction(_ sender: UIButton) {
                                cons_bottom.constant = -JQ_ScreenW
                                UIView.animate(withDuration: 0.4) {
                                                self.alpha = 0
                                                self.layoutIfNeeded()
                                }completion: { _ in
                                                self.removeFromSuperview()
                                }
                }
}
XQMuse/Root/Course/View/CourseSendGiftView.xib
New file
@@ -0,0 +1,111 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="CourseSendGiftView" customModule="XQMuse" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="LSz-KU-Ren">
                    <rect key="frame" x="0.0" y="627" width="393" height="225"/>
                    <subviews>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Sfd-UT-Jfh">
                            <rect key="frame" x="46" y="143" width="301" height="40"/>
                            <color key="backgroundColor" red="0.55686274509803924" green="0.64313725490196072" blue="0.47843137254901957" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="40" id="Ch4-AT-SzS"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="15"/>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" title="确认赠送"/>
                            <userDefinedRuntimeAttributes>
                                <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                    <real key="value" value="20"/>
                                </userDefinedRuntimeAttribute>
                            </userDefinedRuntimeAttributes>
                            <connections>
                                <action selector="completeAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="0Cz-q8-Gw1"/>
                            </connections>
                        </button>
                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="WjL-9e-RTJ">
                            <rect key="frame" x="0.0" y="123.66666666666663" width="393" height="0.3333333333333286"/>
                            <color key="backgroundColor" red="0.85882352941176465" green="0.85882352941176465" blue="0.90588235294117647" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="0.5" id="OvQ-aG-Ja5"/>
                            </constraints>
                        </view>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="订单金额:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="50e-Zj-0x8">
                            <rect key="frame" x="14" y="78.666666666666629" width="64.666666666666671" height="20"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="20" id="G5z-ZX-Ecd"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
                            <nil key="textColor"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="¥0" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Nxc-CP-MV1">
                            <rect key="frame" x="360.66666666666669" y="80" width="18.333333333333314" height="17"/>
                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/>
                            <color key="textColor" red="0.9882352941176471" green="0.64313725490196072" blue="0.19607843137254902" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            <nil key="highlightedColor"/>
                        </label>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstItem="Sfd-UT-Jfh" firstAttribute="top" secondItem="WjL-9e-RTJ" secondAttribute="bottom" constant="19" id="2UU-eT-y0g"/>
                        <constraint firstItem="Nxc-CP-MV1" firstAttribute="centerY" secondItem="50e-Zj-0x8" secondAttribute="centerY" id="3wu-c9-16a"/>
                        <constraint firstItem="WjL-9e-RTJ" firstAttribute="leading" secondItem="LSz-KU-Ren" secondAttribute="leading" id="E7P-CV-pEk"/>
                        <constraint firstItem="50e-Zj-0x8" firstAttribute="leading" secondItem="LSz-KU-Ren" secondAttribute="leading" constant="14" id="FWa-Fg-onc"/>
                        <constraint firstAttribute="trailing" secondItem="WjL-9e-RTJ" secondAttribute="trailing" id="Rfg-tw-AYT"/>
                        <constraint firstAttribute="bottomMargin" secondItem="Sfd-UT-Jfh" secondAttribute="bottom" id="RyI-07-ePU"/>
                        <constraint firstAttribute="trailing" secondItem="Sfd-UT-Jfh" secondAttribute="trailing" constant="46" id="U4s-iM-S4p"/>
                        <constraint firstAttribute="height" constant="225" id="hnP-qJ-dUE"/>
                        <constraint firstAttribute="trailing" secondItem="Nxc-CP-MV1" secondAttribute="trailing" constant="14" id="yj2-7F-xFu"/>
                        <constraint firstItem="Sfd-UT-Jfh" firstAttribute="leading" secondItem="LSz-KU-Ren" secondAttribute="leading" constant="46" id="z5v-ab-pXi"/>
                        <constraint firstItem="WjL-9e-RTJ" firstAttribute="top" secondItem="50e-Zj-0x8" secondAttribute="bottom" constant="25" id="zqO-9k-JpZ"/>
                    </constraints>
                </view>
                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="acJ-rr-fZR">
                    <rect key="frame" x="0.0" y="59" width="393" height="568"/>
                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                    <connections>
                        <action selector="cancelAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="NSN-uQ-AAg"/>
                    </connections>
                </button>
            </subviews>
            <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
            <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.69999999999999996" colorSpace="custom" customColorSpace="sRGB"/>
            <constraints>
                <constraint firstItem="LSz-KU-Ren" firstAttribute="top" secondItem="acJ-rr-fZR" secondAttribute="bottom" id="4cT-Jd-k1O"/>
                <constraint firstItem="LSz-KU-Ren" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" id="dwp-pW-dJ7"/>
                <constraint firstItem="vUN-kp-3ea" firstAttribute="trailing" secondItem="acJ-rr-fZR" secondAttribute="trailing" id="fWv-3E-E9t"/>
                <constraint firstItem="vUN-kp-3ea" firstAttribute="trailing" secondItem="LSz-KU-Ren" secondAttribute="trailing" id="hF4-yw-8v4"/>
                <constraint firstAttribute="bottom" secondItem="LSz-KU-Ren" secondAttribute="bottom" id="pK1-DH-wy4"/>
                <constraint firstItem="acJ-rr-fZR" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" id="v1B-0R-Pf3"/>
                <constraint firstItem="acJ-rr-fZR" firstAttribute="top" secondItem="vUN-kp-3ea" secondAttribute="top" id="xKT-Pc-D7t"/>
            </constraints>
            <connections>
                <outlet property="btn_complete" destination="Sfd-UT-Jfh" id="BPN-tH-M8e"/>
                <outlet property="cons_bottom" destination="pK1-DH-wy4" id="QEE-cE-Vye"/>
                <outlet property="label_price" destination="Nxc-CP-MV1" id="2th-Tq-1Xv"/>
                <outlet property="view_container" destination="LSz-KU-Ren" id="Hqz-Fe-kp0"/>
            </connections>
            <point key="canvasLocation" x="14.503816793893129" y="19.718309859154932"/>
        </view>
    </objects>
    <resources>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
XQMuse/Root/Home/HomeVC.swift
@@ -12,6 +12,7 @@
                var title = ""
                var subTitle = ""
                var hasMore:Bool = false
                var coverImage:String?
}
class HomeVC: BaseVC {
XQMuse/Root/Other/View/VideoView.swift
New file
@@ -0,0 +1,22 @@
//
//  VoiceView.swift
//  XQMuse
//
//  Created by 无故事王国 on 2024/8/19.
//
import UIKit
import JQTools
class VideoView: UIView {
                override init(frame: CGRect) {
                                super.init(frame: frame)
                                backgroundColor = .jq_randomColor
                }
                required init?(coder: NSCoder) {
                                fatalError("init(coder:) has not been implemented")
                }
}
XQMuse/Root/Pavilion/CCell/PavilionItemCell.swift
New file
@@ -0,0 +1,17 @@
//
//  PavilionItemCell.swift
//  XQMuse
//
//  Created by 无故事王国 on 2024/8/19.
//
import UIKit
class PavilionItemCell: UICollectionViewCell {
    override func awakeFromNib() {
        super.awakeFromNib()
    }
}
XQMuse/Root/Pavilion/CCell/PavilionItemCell.xib
New file
@@ -0,0 +1,119 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="_PavilionItemCell" id="gTV-IL-0wX" customClass="PavilionItemCell" customModule="XQMuse" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="233" height="337"/>
            <autoresizingMask key="autoresizingMask"/>
            <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
                <rect key="frame" x="0.0" y="0.0" width="233" height="337"/>
                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                <subviews>
                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="LoX-Q1-cyl">
                        <rect key="frame" x="5.6666666666666714" y="5.6666666666666714" width="222" height="173.33333333333331"/>
                        <constraints>
                            <constraint firstAttribute="width" secondItem="LoX-Q1-cyl" secondAttribute="height" multiplier="1:0.7822" id="32J-aw-3d5"/>
                        </constraints>
                        <userDefinedRuntimeAttributes>
                            <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                            <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                <real key="value" value="10"/>
                            </userDefinedRuntimeAttribute>
                        </userDefinedRuntimeAttributes>
                    </imageView>
                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="BbC-q1-W3U">
                        <rect key="frame" x="176.33333333333334" y="14" width="42.333333333333343" height="13"/>
                        <subviews>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="距你0km" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="XAi-il-afI">
                                <rect key="frame" x="5.9999999999999982" y="3" width="30.333333333333329" height="7"/>
                                <fontDescription key="fontDescription" type="system" pointSize="7"/>
                                <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                <nil key="highlightedColor"/>
                            </label>
                        </subviews>
                        <color key="backgroundColor" red="0.039215686274509803" green="0.25882352941176467" blue="0.074509803921568626" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstAttribute="trailing" secondItem="XAi-il-afI" secondAttribute="trailing" constant="6" id="p5B-Bt-kkF"/>
                            <constraint firstItem="XAi-il-afI" firstAttribute="leading" secondItem="BbC-q1-W3U" secondAttribute="leading" constant="6" id="qWE-hu-Gof"/>
                            <constraint firstAttribute="height" constant="13" id="qfv-yR-XjE"/>
                            <constraint firstAttribute="bottom" secondItem="XAi-il-afI" secondAttribute="bottom" constant="3" id="rnJ-cu-ove"/>
                            <constraint firstItem="XAi-il-afI" firstAttribute="top" secondItem="BbC-q1-W3U" secondAttribute="top" constant="3" id="yQc-e7-Hyw"/>
                        </constraints>
                        <userDefinedRuntimeAttributes>
                            <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                            <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                <real key="value" value="6.5"/>
                            </userDefinedRuntimeAttribute>
                        </userDefinedRuntimeAttributes>
                    </view>
                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xE9-lZ-06u">
                        <rect key="frame" x="15" y="194" width="203" height="15.666666666666657"/>
                        <fontDescription key="fontDescription" type="boldSystem" pointSize="13"/>
                        <color key="textColor" red="0.039215686270000001" green="0.25882352939999997" blue="0.074509803920000006" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <nil key="highlightedColor"/>
                    </label>
                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_local" translatesAutoresizingMaskIntoConstraints="NO" id="Mdg-Ka-kmF">
                        <rect key="frame" x="15" y="222.33333333333334" width="8" height="10"/>
                        <constraints>
                            <constraint firstAttribute="height" constant="10" id="0ig-xy-gm1"/>
                            <constraint firstAttribute="width" constant="8" id="Yc8-PA-tQC"/>
                        </constraints>
                    </imageView>
                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_phone" translatesAutoresizingMaskIntoConstraints="NO" id="YoC-3O-9D8">
                        <rect key="frame" x="15" y="238.33333333333334" width="8.6666666666666643" height="8.3333333333333428"/>
                        <constraints>
                            <constraint firstAttribute="width" constant="8.5" id="G3j-1r-zaW"/>
                            <constraint firstAttribute="height" constant="8.5" id="ySL-OJ-TRU"/>
                        </constraints>
                    </imageView>
                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Yck-TZ-33e">
                        <rect key="frame" x="28" y="222.33333333333334" width="200" height="9.6666666666666572"/>
                        <fontDescription key="fontDescription" type="system" weight="medium" pointSize="8"/>
                        <color key="textColor" red="0.33725490196078434" green="0.33725490196078434" blue="0.33725490196078434" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <nil key="highlightedColor"/>
                    </label>
                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ig6-yP-XKK">
                        <rect key="frame" x="28.666666666666671" y="237.66666666666666" width="22" height="9.6666666666666572"/>
                        <fontDescription key="fontDescription" type="system" weight="medium" pointSize="8"/>
                        <color key="textColor" red="0.33725490200000002" green="0.33725490200000002" blue="0.33725490200000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <nil key="highlightedColor"/>
                    </label>
                </subviews>
            </view>
            <viewLayoutGuide key="safeArea" id="ZTg-uK-7eu"/>
            <constraints>
                <constraint firstItem="Yck-TZ-33e" firstAttribute="leading" secondItem="Mdg-Ka-kmF" secondAttribute="trailing" constant="5" id="03Z-wu-01o"/>
                <constraint firstAttribute="trailing" secondItem="xE9-lZ-06u" secondAttribute="trailing" constant="15" id="1kY-DQ-Phl"/>
                <constraint firstItem="YoC-3O-9D8" firstAttribute="centerY" secondItem="Ig6-yP-XKK" secondAttribute="centerY" id="9kA-1M-wyQ"/>
                <constraint firstItem="Mdg-Ka-kmF" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" constant="15" id="9xt-cg-4MP"/>
                <constraint firstItem="YoC-3O-9D8" firstAttribute="leading" secondItem="Mdg-Ka-kmF" secondAttribute="leading" id="Dye-2Q-pu5"/>
                <constraint firstAttribute="trailing" secondItem="BbC-q1-W3U" secondAttribute="trailing" constant="14.5" id="RmE-Go-5pC"/>
                <constraint firstItem="YoC-3O-9D8" firstAttribute="top" secondItem="Mdg-Ka-kmF" secondAttribute="bottom" constant="6" id="UOh-W8-U3y"/>
                <constraint firstItem="Mdg-Ka-kmF" firstAttribute="centerY" secondItem="Yck-TZ-33e" secondAttribute="centerY" id="VYP-Jc-YgA"/>
                <constraint firstItem="LoX-Q1-cyl" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" constant="5.5" id="ca0-yW-lIs"/>
                <constraint firstAttribute="trailing" secondItem="Yck-TZ-33e" secondAttribute="trailing" constant="5" id="jWj-9I-o8E"/>
                <constraint firstItem="xE9-lZ-06u" firstAttribute="top" secondItem="LoX-Q1-cyl" secondAttribute="bottom" constant="15" id="jvA-zt-t78"/>
                <constraint firstItem="Ig6-yP-XKK" firstAttribute="leading" secondItem="YoC-3O-9D8" secondAttribute="trailing" constant="5" id="paX-bY-tAA"/>
                <constraint firstItem="LoX-Q1-cyl" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" constant="5.5" id="qrh-uT-bAw"/>
                <constraint firstItem="BbC-q1-W3U" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" constant="14" id="rwk-JY-hvm"/>
                <constraint firstItem="Mdg-Ka-kmF" firstAttribute="top" secondItem="xE9-lZ-06u" secondAttribute="bottom" constant="12.5" id="tys-k5-Nad"/>
                <constraint firstAttribute="trailing" secondItem="LoX-Q1-cyl" secondAttribute="trailing" constant="5.5" id="xVq-Xx-rKg"/>
                <constraint firstItem="xE9-lZ-06u" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" constant="15" id="yl4-HG-eHc"/>
            </constraints>
            <size key="customSize" width="233" height="337"/>
            <point key="canvasLocation" x="156.4885496183206" y="120.77464788732395"/>
        </collectionViewCell>
    </objects>
    <resources>
        <image name="icon_local" width="8" height="10"/>
        <image name="icon_phone" width="8.6666669845581055" height="8.6666669845581055"/>
    </resources>
</document>
XQMuse/Root/Pavilion/PavilionVC.swift
@@ -6,24 +6,79 @@
//
import UIKit
import JQTools
class PavilionVC: BaseVC {
                @IBOutlet weak var collectionView: UICollectionView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
                override func setUI() {
                                super.setUI()
                                view.backgroundColor = UIColor(hexString: "#f6f6f6")
                                collectionView.delegate = self
                                collectionView.dataSource = self
                                collectionView.backgroundColor = .clear
                                collectionView.showsVerticalScrollIndicator = false
                                collectionView.backgroundColor = .clear
                                collectionView.contentInset = UIEdgeInsets(top: 0, left: 28.5, bottom: 0, right: 28.5)
                                collectionView.register(UINib(nibName: "PavilionItemCell", bundle: nil), forCellWithReuseIdentifier: "_PavilionItemCell")
    }
    
    /*
    // MARK: - Navigation
    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destination.
        // Pass the selected object to the new view controller.
                @IBAction func searchAction(_ sender: Any) {
                                let searchVC = PavilionSearchVC()
                                push(vc: searchVC)
    }
    */
}
extension PavilionVC:UICollectionViewDelegate{
                func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
                                let detailVC = PavilionDetailVC()
                                push(vc: detailVC)
                }
}
extension PavilionVC:UICollectionViewDataSource{
                func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
                                 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_PavilionItemCell", for: indexPath) as! PavilionItemCell
                                cell.backgroundColor = .jq_randomColor
                                cell.jq_cornerRadius = 16
                                return cell
                }
                func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
                                return 10
                }
}
extension PavilionVC:UICollectionViewDelegateFlowLayout{
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
                                return 25.5
                }
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
                                return 19
                }
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
                                let w = (JQ_ScreenW - 28.5 * 2 - 19) / 2.0
                                let h = w * 1.2681
                                return CGSizeMake(w, h)
                }
}
//extension PavilionVC:UITextFieldDelegate{
//                func textFieldShouldReturn(_ textField: UITextField) -> Bool {
//                                textField.endEditing(true)
//
//                                return true
//                }
//}
XQMuse/Root/Pavilion/PavilionVC.xib
New file
@@ -0,0 +1,109 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="PavilionVC" customModule="XQMuse" customModuleProvider="target">
            <connections>
                <outlet property="collectionView" destination="cjl-Fc-U1i" id="Blo-Vw-cm2"/>
                <outlet property="view" destination="iN0-l3-epB" id="TNR-nf-b4z"/>
            </connections>
        </placeholder>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view contentMode="scaleToFill" id="iN0-l3-epB">
            <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="X4g-Ky-JIp">
                    <rect key="frame" x="0.0" y="0.0" width="393" height="353.66666666666669"/>
                    <subviews>
                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="bg_pavilion_top" translatesAutoresizingMaskIntoConstraints="NO" id="9FL-8Y-YIj">
                            <rect key="frame" x="0.0" y="0.0" width="393" height="353.66666666666669"/>
                        </imageView>
                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="LKK-7W-RbW" customClass="TapBtn" customModule="XQMuse" customModuleProvider="target">
                            <rect key="frame" x="34.666666666666657" y="197.33333333333334" width="324" height="49"/>
                            <subviews>
                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_search" translatesAutoresizingMaskIntoConstraints="NO" id="Mwd-c6-yJX">
                                    <rect key="frame" x="34.000000000000007" y="13.333333333333314" width="22.333333333333336" height="22"/>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="22" id="eN4-iT-cyW"/>
                                        <constraint firstAttribute="width" constant="22.5" id="oGb-Nq-91g"/>
                                    </constraints>
                                </imageView>
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="搜索你附近的疗愈馆" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6ui-UR-dzc">
                                    <rect key="frame" x="68" y="17.333333333333314" width="110.33333333333331" height="14.333333333333336"/>
                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
                                    <color key="textColor" red="0.87058823529411766" green="0.87058823529411766" blue="0.87058823529411766" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    <nil key="highlightedColor"/>
                                </label>
                            </subviews>
                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                            <constraints>
                                <constraint firstItem="Mwd-c6-yJX" firstAttribute="centerY" secondItem="LKK-7W-RbW" secondAttribute="centerY" id="Uad-y4-m42"/>
                                <constraint firstAttribute="height" constant="49" id="bjS-vd-uNd"/>
                                <constraint firstItem="Mwd-c6-yJX" firstAttribute="leading" secondItem="LKK-7W-RbW" secondAttribute="leading" constant="34" id="ctO-99-kI6"/>
                                <constraint firstItem="6ui-UR-dzc" firstAttribute="leading" secondItem="Mwd-c6-yJX" secondAttribute="trailing" constant="11.5" id="iV1-ou-gTm"/>
                                <constraint firstItem="6ui-UR-dzc" firstAttribute="centerY" secondItem="Mwd-c6-yJX" secondAttribute="centerY" id="jYK-Cs-afh"/>
                            </constraints>
                            <userDefinedRuntimeAttributes>
                                <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                    <real key="value" value="24.5"/>
                                </userDefinedRuntimeAttribute>
                            </userDefinedRuntimeAttributes>
                            <connections>
                                <action selector="searchAction:" destination="-1" eventType="touchUpInside" id="x6w-fc-zXP"/>
                            </connections>
                        </view>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstAttribute="trailing" secondItem="LKK-7W-RbW" secondAttribute="trailing" constant="34.5" id="5cq-Vm-olB"/>
                        <constraint firstItem="9FL-8Y-YIj" firstAttribute="top" secondItem="X4g-Ky-JIp" secondAttribute="top" id="EDn-2y-dxo"/>
                        <constraint firstAttribute="bottom" secondItem="9FL-8Y-YIj" secondAttribute="bottom" id="LDZ-VX-EJY"/>
                        <constraint firstItem="9FL-8Y-YIj" firstAttribute="leading" secondItem="X4g-Ky-JIp" secondAttribute="leading" id="Qmc-bN-2Sg"/>
                        <constraint firstAttribute="bottom" secondItem="LKK-7W-RbW" secondAttribute="bottom" constant="107.5" id="Tht-0C-0IE"/>
                        <constraint firstAttribute="width" secondItem="X4g-Ky-JIp" secondAttribute="height" multiplier="1:0.9" id="hvu-kM-wlK"/>
                        <constraint firstAttribute="trailing" secondItem="9FL-8Y-YIj" secondAttribute="trailing" id="u4u-po-7lT"/>
                        <constraint firstItem="LKK-7W-RbW" firstAttribute="leading" secondItem="X4g-Ky-JIp" secondAttribute="leading" constant="34.5" id="zT6-NZ-sT4"/>
                    </constraints>
                </view>
                <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="cjl-Fc-U1i">
                    <rect key="frame" x="0.0" y="301.33333333333331" width="393" height="516.66666666666674"/>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="b8V-X4-f6k">
                        <size key="itemSize" width="128" height="128"/>
                        <size key="headerReferenceSize" width="0.0" height="0.0"/>
                        <size key="footerReferenceSize" width="0.0" height="0.0"/>
                        <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
                    </collectionViewFlowLayout>
                </collectionView>
            </subviews>
            <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
            <constraints>
                <constraint firstItem="cjl-Fc-U1i" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" id="Di6-35-KpK"/>
                <constraint firstItem="X4g-Ky-JIp" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" id="Dps-1n-L79"/>
                <constraint firstItem="X4g-Ky-JIp" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="PZU-6m-kVv"/>
                <constraint firstItem="vUN-kp-3ea" firstAttribute="bottom" secondItem="cjl-Fc-U1i" secondAttribute="bottom" id="TDO-TE-7xi"/>
                <constraint firstItem="vUN-kp-3ea" firstAttribute="trailing" secondItem="cjl-Fc-U1i" secondAttribute="trailing" id="TNn-sQ-vVu"/>
                <constraint firstItem="cjl-Fc-U1i" firstAttribute="top" secondItem="X4g-Ky-JIp" secondAttribute="bottom" constant="-52.5" id="lcy-0i-Wi9"/>
                <constraint firstItem="vUN-kp-3ea" firstAttribute="trailing" secondItem="X4g-Ky-JIp" secondAttribute="trailing" id="xr8-4F-iZy"/>
            </constraints>
            <point key="canvasLocation" x="14.503816793893129" y="19.718309859154932"/>
        </view>
    </objects>
    <resources>
        <image name="bg_pavilion_top" width="393.66665649414062" height="352.66665649414062"/>
        <image name="icon_search" width="22.666666030883789" height="22"/>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
XQMuse/Root/Pavilion/VC/PavilionDetailVC.swift
New file
@@ -0,0 +1,36 @@
//
//  PavilionDetailVC.swift
//  XQMuse
//
//  Created by 无故事王国 on 2024/8/19.
//
import UIKit
import JQTools
import WebKit
class PavilionDetailVC: BaseVC {
                @IBOutlet weak var scrollView: UIScrollView!
                @IBOutlet weak var webView: WKWebView!
                @IBOutlet weak var view_bannerBg: UIView!
                override func viewWillAppear(_ animated: Bool) {
                                super.viewWillAppear(animated)
                                (navigationItem.leftBarButtonItem?.customView as? UIButton)?.setImage(UIImage(named: "btn_back")?.withTintColor(.white), for: .normal)
                }
                override func viewDidLoad() {
        super.viewDidLoad()
                                title = "疗愈馆详情"
                                scrollView.contentInsetAdjustmentBehavior = .never
                                view_bannerBg.backgroundColor = .jq_randomColor
                                webView.scrollView.isScrollEnabled = false
    }
                override var preferredStatusBarStyle: UIStatusBarStyle{
                                return .lightContent
                }
}
XQMuse/Root/Pavilion/VC/PavilionDetailVC.xib
New file
@@ -0,0 +1,226 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="PavilionDetailVC" customModule="XQMuse" customModuleProvider="target">
            <connections>
                <outlet property="scrollView" destination="yya-lM-LKe" id="3Mj-Nj-oHg"/>
                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
                <outlet property="view_bannerBg" destination="bRv-iS-Gxa" id="Crd-Q4-llL"/>
                <outlet property="webView" destination="IFs-PA-QBm" id="Xna-he-6OO"/>
            </connections>
        </placeholder>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
            <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="yya-lM-LKe">
                    <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
                    <subviews>
                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="SvO-06-u0I">
                            <rect key="frame" x="0.0" y="0.0" width="393" height="758.33333333333337"/>
                            <subviews>
                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="bRv-iS-Gxa">
                                    <rect key="frame" x="0.0" y="0.0" width="393" height="314.33333333333331"/>
                                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                                    <constraints>
                                        <constraint firstAttribute="width" secondItem="bRv-iS-Gxa" secondAttribute="height" multiplier="1:0.8" id="AkY-bQ-ulu"/>
                                    </constraints>
                                </view>
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="心泉疗愈馆" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ej2-gY-nmo">
                                    <rect key="frame" x="26.666666666666671" y="346" width="102.00000000000001" height="24"/>
                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="20"/>
                                    <color key="textColor" red="0.039215686274509803" green="0.25882352941176467" blue="0.074509803921568626" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    <nil key="highlightedColor"/>
                                </label>
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Xin quan" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="mof-4V-8Cf">
                                    <rect key="frame" x="324.33333333333331" y="352" width="42.333333333333314" height="12"/>
                                    <fontDescription key="fontDescription" type="system" pointSize="10"/>
                                    <color key="textColor" red="0.039215686270000001" green="0.25882352939999997" blue="0.074509803920000006" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    <nil key="highlightedColor"/>
                                </label>
                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="eFG-qF-ock">
                                    <rect key="frame" x="27" y="380.33333333333331" width="339" height="0.66666666666668561"/>
                                    <color key="backgroundColor" red="0.33725490196078434" green="0.33725490196078434" blue="0.33725490196078434" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="0.5" id="7i3-Et-x8a"/>
                                    </constraints>
                                </view>
                                <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="6.5" translatesAutoresizingMaskIntoConstraints="NO" id="ied-2M-OzN">
                                    <rect key="frame" x="28" y="393" width="240" height="47.666666666666686"/>
                                    <subviews>
                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="O2C-vA-cCo">
                                            <rect key="frame" x="0.0" y="0.0" width="240" height="11.333333333333334"/>
                                            <subviews>
                                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_phone" translatesAutoresizingMaskIntoConstraints="NO" id="pjg-xX-xV1">
                                                    <rect key="frame" x="0.0" y="0.66666666666668561" width="9.6666666666666661" height="10"/>
                                                    <constraints>
                                                        <constraint firstAttribute="width" constant="9.5" id="66U-WC-bbO"/>
                                                        <constraint firstAttribute="height" constant="10" id="TLw-b9-1bj"/>
                                                    </constraints>
                                                </imageView>
                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fDf-4X-hUI">
                                                    <rect key="frame" x="16" y="0.0" width="224" height="11"/>
                                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="9"/>
                                                    <color key="textColor" red="0.1803921568627451" green="0.1803921568627451" blue="0.1803921568627451" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                            </subviews>
                                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                                            <constraints>
                                                <constraint firstItem="pjg-xX-xV1" firstAttribute="centerY" secondItem="O2C-vA-cCo" secondAttribute="centerY" id="8eR-ZL-u3N"/>
                                                <constraint firstItem="fDf-4X-hUI" firstAttribute="centerY" secondItem="O2C-vA-cCo" secondAttribute="centerY" id="CZ0-31-1Ob"/>
                                                <constraint firstItem="fDf-4X-hUI" firstAttribute="leading" secondItem="pjg-xX-xV1" secondAttribute="trailing" constant="6.5" id="Dco-J0-Uwy"/>
                                                <constraint firstAttribute="height" constant="11.5" id="Vu6-QA-qoG"/>
                                                <constraint firstItem="pjg-xX-xV1" firstAttribute="leading" secondItem="O2C-vA-cCo" secondAttribute="leading" id="taF-B9-udb"/>
                                                <constraint firstAttribute="trailing" secondItem="fDf-4X-hUI" secondAttribute="trailing" id="u9h-ka-MTH"/>
                                            </constraints>
                                        </view>
                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Zw1-xu-iJP">
                                            <rect key="frame" x="0.0" y="18" width="240" height="11.666666666666664"/>
                                            <subviews>
                                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_local" translatesAutoresizingMaskIntoConstraints="NO" id="9xu-m3-4Al">
                                                    <rect key="frame" x="0.0" y="0.66666666666668561" width="9.6666666666666661" height="10"/>
                                                    <constraints>
                                                        <constraint firstAttribute="width" constant="9.5" id="D7S-8u-g4p"/>
                                                    </constraints>
                                                </imageView>
                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="28i-aJ-cBs">
                                                    <rect key="frame" x="16" y="0.33333333333331439" width="224" height="11"/>
                                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="9"/>
                                                    <color key="textColor" red="0.18039215689999999" green="0.18039215689999999" blue="0.18039215689999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                            </subviews>
                                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                                            <constraints>
                                                <constraint firstItem="9xu-m3-4Al" firstAttribute="centerY" secondItem="Zw1-xu-iJP" secondAttribute="centerY" id="Cam-cd-Vyk"/>
                                                <constraint firstAttribute="height" constant="11.5" id="Iwi-Qa-FDd"/>
                                                <constraint firstItem="28i-aJ-cBs" firstAttribute="centerY" secondItem="Zw1-xu-iJP" secondAttribute="centerY" id="Kcp-sF-Jz5"/>
                                                <constraint firstItem="9xu-m3-4Al" firstAttribute="leading" secondItem="Zw1-xu-iJP" secondAttribute="leading" id="UuL-Rl-5Bd"/>
                                                <constraint firstItem="28i-aJ-cBs" firstAttribute="leading" secondItem="9xu-m3-4Al" secondAttribute="trailing" constant="6.5" id="phb-2w-5ig"/>
                                                <constraint firstAttribute="trailing" secondItem="28i-aJ-cBs" secondAttribute="trailing" id="u26-L7-Pbp"/>
                                            </constraints>
                                        </view>
                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="D2P-HH-gTE">
                                            <rect key="frame" x="0.0" y="36.333333333333314" width="240" height="11.333333333333336"/>
                                            <subviews>
                                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_time_1" translatesAutoresizingMaskIntoConstraints="NO" id="sSU-es-3e5">
                                                    <rect key="frame" x="0.0" y="0.66666666666668561" width="9.6666666666666661" height="10"/>
                                                    <constraints>
                                                        <constraint firstAttribute="height" constant="10" id="pXr-WG-eZY"/>
                                                        <constraint firstAttribute="width" constant="9.5" id="t2o-QH-14G"/>
                                                    </constraints>
                                                </imageView>
                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="49g-Ie-o9H">
                                                    <rect key="frame" x="16" y="0.0" width="224" height="11"/>
                                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="9"/>
                                                    <color key="textColor" red="0.18039215689999999" green="0.18039215689999999" blue="0.18039215689999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                            </subviews>
                                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                                            <constraints>
                                                <constraint firstItem="sSU-es-3e5" firstAttribute="centerY" secondItem="D2P-HH-gTE" secondAttribute="centerY" id="5Tk-01-k1d"/>
                                                <constraint firstItem="49g-Ie-o9H" firstAttribute="leading" secondItem="sSU-es-3e5" secondAttribute="trailing" constant="6.5" id="96o-XW-Fot"/>
                                                <constraint firstItem="49g-Ie-o9H" firstAttribute="centerY" secondItem="D2P-HH-gTE" secondAttribute="centerY" id="Nho-fI-tYh"/>
                                                <constraint firstItem="sSU-es-3e5" firstAttribute="leading" secondItem="D2P-HH-gTE" secondAttribute="leading" id="nrc-Jd-Bjp"/>
                                                <constraint firstAttribute="trailing" secondItem="49g-Ie-o9H" secondAttribute="trailing" id="rRG-7C-Nzg"/>
                                                <constraint firstAttribute="height" constant="11.5" id="wRH-kO-e00"/>
                                            </constraints>
                                        </view>
                                    </subviews>
                                </stackView>
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="简介" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Dmh-Sc-k0l">
                                    <rect key="frame" x="26.666666666666671" y="484.33333333333331" width="41" height="24"/>
                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="20"/>
                                    <color key="textColor" red="0.039215686270000001" green="0.25882352939999997" blue="0.074509803920000006" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    <nil key="highlightedColor"/>
                                </label>
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="synopsis" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="GpL-nu-QRg">
                                    <rect key="frame" x="324.33333333333331" y="490.33333333333331" width="42.333333333333314" height="12"/>
                                    <fontDescription key="fontDescription" type="system" pointSize="10"/>
                                    <color key="textColor" red="0.039215686270000001" green="0.25882352939999997" blue="0.074509803920000006" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    <nil key="highlightedColor"/>
                                </label>
                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="oEQ-kJ-4nA">
                                    <rect key="frame" x="27" y="519.66666666666663" width="339" height="0.66666666666662877"/>
                                    <color key="backgroundColor" red="0.33725490200000002" green="0.33725490200000002" blue="0.33725490200000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="0.5" id="DIz-JD-EMZ"/>
                                    </constraints>
                                </view>
                                <wkWebView contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="IFs-PA-QBm">
                                    <rect key="frame" x="27" y="539.33333333333337" width="339" height="200"/>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="200" id="rWr-aC-9mh"/>
                                    </constraints>
                                    <wkWebViewConfiguration key="configuration">
                                        <audiovisualMediaTypes key="mediaTypesRequiringUserActionForPlayback" none="YES"/>
                                        <wkPreferences key="preferences"/>
                                    </wkWebViewConfiguration>
                                </wkWebView>
                            </subviews>
                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                            <constraints>
                                <constraint firstItem="bRv-iS-Gxa" firstAttribute="top" secondItem="SvO-06-u0I" secondAttribute="top" id="6zr-oX-fzV"/>
                                <constraint firstItem="ied-2M-OzN" firstAttribute="top" secondItem="eFG-qF-ock" secondAttribute="bottom" constant="12" id="Are-Tb-Qeg"/>
                                <constraint firstItem="eFG-qF-ock" firstAttribute="leading" secondItem="SvO-06-u0I" secondAttribute="leading" constant="27" id="BC0-fp-qkG"/>
                                <constraint firstItem="ej2-gY-nmo" firstAttribute="leading" secondItem="SvO-06-u0I" secondAttribute="leading" constant="26.5" id="Lqo-QQ-LtF"/>
                                <constraint firstAttribute="trailing" secondItem="IFs-PA-QBm" secondAttribute="trailing" constant="27" id="MTp-cU-OI2"/>
                                <constraint firstItem="Dmh-Sc-k0l" firstAttribute="leading" secondItem="SvO-06-u0I" secondAttribute="leading" constant="26.5" id="MeG-Nf-cTv"/>
                                <constraint firstAttribute="trailing" secondItem="eFG-qF-ock" secondAttribute="trailing" constant="27" id="NBo-De-g2n"/>
                                <constraint firstAttribute="trailing" secondItem="bRv-iS-Gxa" secondAttribute="trailing" id="NYn-uO-fjQ"/>
                                <constraint firstItem="bRv-iS-Gxa" firstAttribute="leading" secondItem="SvO-06-u0I" secondAttribute="leading" id="QMU-QN-ZLA"/>
                                <constraint firstItem="ied-2M-OzN" firstAttribute="leading" secondItem="SvO-06-u0I" secondAttribute="leading" constant="28" id="Rqi-qX-eXu"/>
                                <constraint firstAttribute="trailing" secondItem="oEQ-kJ-4nA" secondAttribute="trailing" constant="27" id="Sd2-nj-XrL"/>
                                <constraint firstItem="IFs-PA-QBm" firstAttribute="leading" secondItem="SvO-06-u0I" secondAttribute="leading" constant="27" id="Z2K-qe-Ktl"/>
                                <constraint firstItem="oEQ-kJ-4nA" firstAttribute="leading" secondItem="SvO-06-u0I" secondAttribute="leading" constant="27" id="ba8-C7-Iqh"/>
                                <constraint firstAttribute="bottom" secondItem="IFs-PA-QBm" secondAttribute="bottom" constant="19" id="dWt-F0-gfr"/>
                                <constraint firstItem="IFs-PA-QBm" firstAttribute="top" secondItem="oEQ-kJ-4nA" secondAttribute="bottom" constant="19" id="eF2-JE-MQL"/>
                                <constraint firstItem="mof-4V-8Cf" firstAttribute="centerY" secondItem="ej2-gY-nmo" secondAttribute="centerY" id="jZv-B2-BSI"/>
                                <constraint firstItem="GpL-nu-QRg" firstAttribute="centerY" secondItem="Dmh-Sc-k0l" secondAttribute="centerY" id="obV-cX-28h"/>
                                <constraint firstItem="eFG-qF-ock" firstAttribute="top" secondItem="ej2-gY-nmo" secondAttribute="bottom" constant="10.5" id="qa9-Bi-xv9"/>
                                <constraint firstItem="ej2-gY-nmo" firstAttribute="top" secondItem="bRv-iS-Gxa" secondAttribute="bottom" constant="31.5" id="qel-uN-FWm"/>
                                <constraint firstItem="oEQ-kJ-4nA" firstAttribute="top" secondItem="Dmh-Sc-k0l" secondAttribute="bottom" constant="11.5" id="tOQ-TD-dfZ"/>
                                <constraint firstAttribute="trailing" secondItem="mof-4V-8Cf" secondAttribute="trailing" constant="26.5" id="v3U-ic-0Xj"/>
                                <constraint firstItem="Dmh-Sc-k0l" firstAttribute="top" secondItem="ied-2M-OzN" secondAttribute="bottom" constant="43.5" id="vMy-Av-7Rs"/>
                                <constraint firstAttribute="trailing" secondItem="GpL-nu-QRg" secondAttribute="trailing" constant="26.5" id="xsc-7t-LAd"/>
                            </constraints>
                        </view>
                    </subviews>
                    <constraints>
                        <constraint firstItem="SvO-06-u0I" firstAttribute="leading" secondItem="yya-lM-LKe" secondAttribute="leading" id="Aj3-iz-RbA"/>
                        <constraint firstItem="SvO-06-u0I" firstAttribute="centerX" secondItem="yya-lM-LKe" secondAttribute="centerX" id="PcK-47-WUi"/>
                        <constraint firstAttribute="trailing" secondItem="SvO-06-u0I" secondAttribute="trailing" id="WYR-TT-BBA"/>
                        <constraint firstItem="SvO-06-u0I" firstAttribute="top" secondItem="yya-lM-LKe" secondAttribute="top" id="rt0-Dg-OJG"/>
                        <constraint firstAttribute="bottom" secondItem="SvO-06-u0I" secondAttribute="bottom" id="vke-LX-G0X"/>
                    </constraints>
                </scrollView>
            </subviews>
            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
            <constraints>
                <constraint firstAttribute="trailing" secondItem="yya-lM-LKe" secondAttribute="trailing" id="28E-wm-vmV"/>
                <constraint firstItem="yya-lM-LKe" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="6e5-We-Cu0"/>
                <constraint firstAttribute="bottom" secondItem="yya-lM-LKe" secondAttribute="bottom" id="iCP-Oe-Fqr"/>
                <constraint firstItem="yya-lM-LKe" firstAttribute="top" secondItem="i5M-Pr-FkT" secondAttribute="top" id="lWY-Wt-eNv"/>
            </constraints>
            <point key="canvasLocation" x="14.503816793893129" y="19.718309859154932"/>
        </view>
    </objects>
    <resources>
        <image name="icon_local" width="8" height="10"/>
        <image name="icon_phone" width="8.6666669845581055" height="8.6666669845581055"/>
        <image name="icon_time_1" width="9" height="9"/>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
XQMuse/Root/Pavilion/VC/PavilionSearchVC.swift
New file
@@ -0,0 +1,78 @@
//
//  PavilionSearchVC.swift
//  XQMuse
//
//  Created by 无故事王国 on 2024/8/19.
//
import UIKit
import JQTools
class PavilionSearchVC: BaseVC {
                @IBOutlet weak var tf_search: UITextField!
                @IBOutlet weak var collectionView: UICollectionView!
                override func viewDidLoad() {
        super.viewDidLoad()
                                title = "疗愈馆"
                                tf_search.delegate = self
                                tf_search.returnKeyType = .search
    }
                override func setUI() {
                                super.setUI()
                                view.backgroundColor = UIColor(hexString: "#f6f6f6")
                                collectionView.delegate = self
                                collectionView.dataSource = self
                                collectionView.backgroundColor = .clear
                                collectionView.showsVerticalScrollIndicator = false
                                collectionView.backgroundColor = .clear
                                collectionView.contentInset = UIEdgeInsets(top: 0, left: 28.5, bottom: 0, right: 28.5)
                                collectionView.register(UINib(nibName: "PavilionItemCell", bundle: nil), forCellWithReuseIdentifier: "_PavilionItemCell")
                }
}
extension PavilionSearchVC:UITextFieldDelegate{
                func textFieldShouldReturn(_ textField: UITextField) -> Bool {
                                return true
                }
}
extension PavilionSearchVC:UICollectionViewDataSource{
                func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
                                let detailVC = PavilionDetailVC()
                                push(vc: detailVC)
                }
                func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
                                let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_PavilionItemCell", for: indexPath) as! PavilionItemCell
                                cell.backgroundColor = .jq_randomColor
                                cell.jq_cornerRadius = 16
                                return cell
                }
                func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
                                return 10
                }
}
extension PavilionSearchVC:UICollectionViewDelegateFlowLayout{
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
                                return 25.5
                }
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
                                return 19
                }
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
                                let w = (JQ_ScreenW - 28.5 * 2 - 19) / 2.0
                                let h = w * 1.2681
                                return CGSizeMake(w, h)
                }
}
XQMuse/Root/Pavilion/VC/PavilionSearchVC.xib
New file
@@ -0,0 +1,100 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="PavilionSearchVC" customModule="XQMuse" customModuleProvider="target">
            <connections>
                <outlet property="collectionView" destination="GII-EZ-ldn" id="2aA-lL-quB"/>
                <outlet property="tf_search" destination="NAr-DA-yxv" id="5eB-FY-GWu"/>
                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
            </connections>
        </placeholder>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
            <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="amB-PO-kjr">
                    <rect key="frame" x="21.666666666666657" y="80.666666666666671" width="306" height="49.000000000000014"/>
                    <subviews>
                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_search" translatesAutoresizingMaskIntoConstraints="NO" id="hNQ-kz-xpp">
                            <rect key="frame" x="34" y="13.333333333333329" width="22.333333333333329" height="22"/>
                            <constraints>
                                <constraint firstAttribute="width" constant="22.5" id="KpR-0C-YFT"/>
                                <constraint firstAttribute="height" constant="22" id="LHs-vU-Px6"/>
                            </constraints>
                        </imageView>
                        <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="搜索你附近的疗愈馆" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="NAr-DA-yxv">
                            <rect key="frame" x="68.000000000000014" y="0.0" width="226.33333333333337" height="49"/>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
                            <textInputTraits key="textInputTraits"/>
                        </textField>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstAttribute="bottom" secondItem="NAr-DA-yxv" secondAttribute="bottom" id="0Sg-DS-zeb"/>
                        <constraint firstItem="NAr-DA-yxv" firstAttribute="leading" secondItem="hNQ-kz-xpp" secondAttribute="trailing" constant="11.5" id="Qqk-Gb-mjh"/>
                        <constraint firstItem="NAr-DA-yxv" firstAttribute="top" secondItem="amB-PO-kjr" secondAttribute="top" id="UXp-Jq-JiI"/>
                        <constraint firstAttribute="height" constant="49" id="bXE-9n-1MF"/>
                        <constraint firstItem="hNQ-kz-xpp" firstAttribute="centerY" secondItem="amB-PO-kjr" secondAttribute="centerY" id="goC-db-zlE"/>
                        <constraint firstItem="hNQ-kz-xpp" firstAttribute="leading" secondItem="amB-PO-kjr" secondAttribute="leading" constant="34" id="ix8-dD-VnV"/>
                        <constraint firstAttribute="trailing" secondItem="NAr-DA-yxv" secondAttribute="trailing" constant="11.5" id="n1k-s3-h9Q"/>
                    </constraints>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                            <real key="value" value="24.5"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </view>
                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="WvZ-LY-I3P">
                    <rect key="frame" x="327.66666666666669" y="80.666666666666671" width="65.333333333333314" height="49.000000000000014"/>
                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                    <state key="normal" title="取消">
                        <color key="titleColor" red="0.039215686274509803" green="0.25882352941176467" blue="0.074509803921568626" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                    </state>
                </button>
                <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="GII-EZ-ldn">
                    <rect key="frame" x="0.0" y="149" width="393" height="669"/>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="Vo5-BY-YbS">
                        <size key="itemSize" width="128" height="128"/>
                        <size key="headerReferenceSize" width="0.0" height="0.0"/>
                        <size key="footerReferenceSize" width="0.0" height="0.0"/>
                        <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
                    </collectionViewFlowLayout>
                </collectionView>
            </subviews>
            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
            <constraints>
                <constraint firstItem="amB-PO-kjr" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="21.5" id="0gy-LC-YZa"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="GII-EZ-ldn" secondAttribute="trailing" id="75l-Cx-Qoq"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="WvZ-LY-I3P" secondAttribute="trailing" id="8Yj-48-Lmg"/>
                <constraint firstItem="WvZ-LY-I3P" firstAttribute="leading" secondItem="amB-PO-kjr" secondAttribute="trailing" id="8ga-y0-OVr"/>
                <constraint firstItem="amB-PO-kjr" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" constant="21.5" id="Aeg-39-qgf"/>
                <constraint firstItem="GII-EZ-ldn" firstAttribute="top" secondItem="amB-PO-kjr" secondAttribute="bottom" constant="19.5" id="HRU-9e-XkR"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="GII-EZ-ldn" secondAttribute="bottom" id="SUx-Iy-v23"/>
                <constraint firstItem="WvZ-LY-I3P" firstAttribute="bottom" secondItem="amB-PO-kjr" secondAttribute="bottom" id="XlE-ab-52s"/>
                <constraint firstAttribute="trailing" secondItem="amB-PO-kjr" secondAttribute="trailing" constant="65.5" id="dnQ-Xn-12W"/>
                <constraint firstItem="GII-EZ-ldn" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="ofV-Jz-9c2"/>
                <constraint firstItem="WvZ-LY-I3P" firstAttribute="top" secondItem="amB-PO-kjr" secondAttribute="top" id="sPA-hk-IRk"/>
            </constraints>
            <point key="canvasLocation" x="110.68702290076335" y="20.422535211267608"/>
        </view>
    </objects>
    <resources>
        <image name="icon_search" width="22.666666030883789" height="22"/>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
XQMuse/SceneDelegate.swift
@@ -29,6 +29,7 @@
                    let tabbar = BaseTabBarVC()
                    window?.rootViewController = tabbar
                    window?.makeKeyAndVisible()
                    tabbar.selectedIndex = 0
                    SVProgressHUD.setContainerView(window)
                    SVProgressHUD.setDefaultStyle(.dark)