├── StickyHeader
├── Assets.xcassets
│ ├── Contents.json
│ ├── AccentColor.colorset
│ │ └── Contents.json
│ └── AppIcon.appiconset
│ │ └── Contents.json
├── Preview Content
│ └── Preview Assets.xcassets
│ │ └── Contents.json
├── StickyHeaderApp.swift
└── Presentation
│ └── Main
│ └── MainScreen.swift
├── StickyHeader.xcodeproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcuserdata
│ │ └── leopold.xcuserdatad
│ │ └── UserInterfaceState.xcuserstate
├── xcuserdata
│ └── leopold.xcuserdatad
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
└── project.pbxproj
└── README.md
/StickyHeader/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/StickyHeader/Preview Content/Preview Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/StickyHeader.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/StickyHeader/StickyHeaderApp.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 |
3 | @main
4 | struct StickyHeaderApp: App {
5 | var body: some Scene {
6 | WindowGroup {
7 | MainScreen()
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/StickyHeader/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/StickyHeader.xcodeproj/project.xcworkspace/xcuserdata/leopold.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leopoldubzq/StickyHeader/HEAD/StickyHeader.xcodeproj/project.xcworkspace/xcuserdata/leopold.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/StickyHeader.xcodeproj/xcuserdata/leopold.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | StickyHeader.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/StickyHeader/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "platform" : "ios",
6 | "size" : "1024x1024"
7 | },
8 | {
9 | "appearances" : [
10 | {
11 | "appearance" : "luminosity",
12 | "value" : "dark"
13 | }
14 | ],
15 | "idiom" : "universal",
16 | "platform" : "ios",
17 | "size" : "1024x1024"
18 | },
19 | {
20 | "appearances" : [
21 | {
22 | "appearance" : "luminosity",
23 | "value" : "tinted"
24 | }
25 | ],
26 | "idiom" : "universal",
27 | "platform" : "ios",
28 | "size" : "1024x1024"
29 | }
30 | ],
31 | "info" : {
32 | "author" : "xcode",
33 | "version" : 1
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 🚀 Sticky Header in SwiftUI using GeometryReader
2 |
3 | This repository demonstrates how to create a **sticky header** in SwiftUI using `GeometryReader` and `proxy.frame(in: .scrollView).minY`. The effect ensures that the header remains fixed at the top when scrolling up in a `ScrollView`.
4 |
5 | ## 📸 Demo Preview
6 |
7 |
8 | ## 📌 How It Works
9 | - **Tracking the header position** – `GeometryReader` allows us to monitor the header’s coordinates in the `ScrollView` space.
10 | - **Detecting when the header reaches the top** – If `minY <= 0`, we "stick" the header at the top.
11 | - **Smooth and efficient** – Achieves the sticky effect without unnecessary complexity.
12 |
13 | ## 🔹 Why Use This Approach?
14 | ✅ Lightweight and efficient solution using built-in SwiftUI tools.
15 | ✅ No need for custom scroll detection logic.
16 | ✅ Works seamlessly with other SwiftUI components.
17 |
--------------------------------------------------------------------------------
/StickyHeader/Presentation/Main/MainScreen.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 |
3 | struct MainScreen: View {
4 |
5 | @State private var scrollOffsetY: CGFloat = .zero
6 | @State private var colors: [Color] = [
7 | .red,
8 | .green,
9 | .blue,
10 | .orange,
11 | .yellow,
12 | .brown,
13 | .teal,
14 | .purple,
15 | .cyan,
16 | .indigo,
17 | .pink
18 | ]
19 |
20 | var body: some View {
21 | GeometryReader { proxy in
22 | let safeArea = proxy.safeAreaInsets
23 | ScrollView {
24 | VStack(spacing: 0) {
25 | Header(safeArea: safeArea)
26 | .padding([.horizontal, .vertical])
27 | ForEach(colors, id: \.self) { color in
28 | ColorCell(color)
29 | }
30 | }
31 | .padding(.vertical)
32 | .zIndex(0)
33 | .scrollTargetLayout()
34 | }
35 | .onScrollGeometryChange(for: CGFloat.self) { geometry in
36 | geometry.contentOffset.y + geometry.contentInsets.top
37 | } action: { _, newValue in
38 | scrollOffsetY = newValue
39 | }
40 | .background(Color(uiColor: .secondarySystemGroupedBackground))
41 | }
42 |
43 | }
44 |
45 | @ViewBuilder
46 | private func ColorCell(_ color: Color) -> some View {
47 | GeometryReader { proxy in
48 | let minY = proxy.frame(in: .scrollView).minY
49 | Rectangle()
50 | .fill(color.gradient)
51 | .blur(radius: max(0, -minY * 0.05))
52 | }
53 | .frame(height: 150)
54 | }
55 |
56 | @ViewBuilder
57 | private func Header(safeArea: EdgeInsets) -> some View {
58 | VStack {
59 | Text("Hello, Leopold!")
60 | .font(.largeTitle)
61 | .bold()
62 | .frame(maxWidth: .infinity, alignment: .leading)
63 | .opacity(1.0 - max(0, scrollOffsetY * 0.02))
64 |
65 | SearchField()
66 | }
67 | .zIndex(1)
68 | }
69 |
70 | @ViewBuilder
71 | private func SearchField() -> some View {
72 | GeometryReader { proxy in
73 | let minY = proxy.frame(in: .scrollView).minY
74 | HStack {
75 | Image(systemName: "magnifyingglass")
76 | .fontWeight(.semibold)
77 | Text("What do you want to search for?")
78 | .font(.system(size: 15))
79 | Spacer()
80 | }
81 | .foregroundStyle(.secondary)
82 | .padding(.horizontal)
83 | .frame(height: proxy.size.height)
84 | .background(
85 | Color(uiColor: .tertiarySystemGroupedBackground),
86 | in: .capsule
87 | )
88 | .shadow(radius: 12)
89 | .offset(y: max(0, -minY))
90 | }
91 | .frame(height: 50)
92 | }
93 | }
94 |
95 | #Preview {
96 | MainScreen()
97 | }
98 |
--------------------------------------------------------------------------------
/StickyHeader.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 77;
7 | objects = {
8 |
9 | /* Begin PBXFileReference section */
10 | 02D3BAA82D6646210091E114 /* StickyHeader.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = StickyHeader.app; sourceTree = BUILT_PRODUCTS_DIR; };
11 | /* End PBXFileReference section */
12 |
13 | /* Begin PBXFileSystemSynchronizedRootGroup section */
14 | 02D3BAAA2D6646210091E114 /* StickyHeader */ = {
15 | isa = PBXFileSystemSynchronizedRootGroup;
16 | path = StickyHeader;
17 | sourceTree = "";
18 | };
19 | /* End PBXFileSystemSynchronizedRootGroup section */
20 |
21 | /* Begin PBXFrameworksBuildPhase section */
22 | 02D3BAA52D6646210091E114 /* Frameworks */ = {
23 | isa = PBXFrameworksBuildPhase;
24 | buildActionMask = 2147483647;
25 | files = (
26 | );
27 | runOnlyForDeploymentPostprocessing = 0;
28 | };
29 | /* End PBXFrameworksBuildPhase section */
30 |
31 | /* Begin PBXGroup section */
32 | 02D3BA9F2D6646210091E114 = {
33 | isa = PBXGroup;
34 | children = (
35 | 02D3BAAA2D6646210091E114 /* StickyHeader */,
36 | 02D3BAA92D6646210091E114 /* Products */,
37 | );
38 | sourceTree = "";
39 | };
40 | 02D3BAA92D6646210091E114 /* Products */ = {
41 | isa = PBXGroup;
42 | children = (
43 | 02D3BAA82D6646210091E114 /* StickyHeader.app */,
44 | );
45 | name = Products;
46 | sourceTree = "";
47 | };
48 | /* End PBXGroup section */
49 |
50 | /* Begin PBXNativeTarget section */
51 | 02D3BAA72D6646210091E114 /* StickyHeader */ = {
52 | isa = PBXNativeTarget;
53 | buildConfigurationList = 02D3BAB62D6646230091E114 /* Build configuration list for PBXNativeTarget "StickyHeader" */;
54 | buildPhases = (
55 | 02D3BAA42D6646210091E114 /* Sources */,
56 | 02D3BAA52D6646210091E114 /* Frameworks */,
57 | 02D3BAA62D6646210091E114 /* Resources */,
58 | );
59 | buildRules = (
60 | );
61 | dependencies = (
62 | );
63 | fileSystemSynchronizedGroups = (
64 | 02D3BAAA2D6646210091E114 /* StickyHeader */,
65 | );
66 | name = StickyHeader;
67 | packageProductDependencies = (
68 | );
69 | productName = StickyHeader;
70 | productReference = 02D3BAA82D6646210091E114 /* StickyHeader.app */;
71 | productType = "com.apple.product-type.application";
72 | };
73 | /* End PBXNativeTarget section */
74 |
75 | /* Begin PBXProject section */
76 | 02D3BAA02D6646210091E114 /* Project object */ = {
77 | isa = PBXProject;
78 | attributes = {
79 | BuildIndependentTargetsInParallel = 1;
80 | LastSwiftUpdateCheck = 1610;
81 | LastUpgradeCheck = 1610;
82 | TargetAttributes = {
83 | 02D3BAA72D6646210091E114 = {
84 | CreatedOnToolsVersion = 16.1;
85 | };
86 | };
87 | };
88 | buildConfigurationList = 02D3BAA32D6646210091E114 /* Build configuration list for PBXProject "StickyHeader" */;
89 | developmentRegion = en;
90 | hasScannedForEncodings = 0;
91 | knownRegions = (
92 | en,
93 | Base,
94 | );
95 | mainGroup = 02D3BA9F2D6646210091E114;
96 | minimizedProjectReferenceProxies = 1;
97 | preferredProjectObjectVersion = 77;
98 | productRefGroup = 02D3BAA92D6646210091E114 /* Products */;
99 | projectDirPath = "";
100 | projectRoot = "";
101 | targets = (
102 | 02D3BAA72D6646210091E114 /* StickyHeader */,
103 | );
104 | };
105 | /* End PBXProject section */
106 |
107 | /* Begin PBXResourcesBuildPhase section */
108 | 02D3BAA62D6646210091E114 /* Resources */ = {
109 | isa = PBXResourcesBuildPhase;
110 | buildActionMask = 2147483647;
111 | files = (
112 | );
113 | runOnlyForDeploymentPostprocessing = 0;
114 | };
115 | /* End PBXResourcesBuildPhase section */
116 |
117 | /* Begin PBXSourcesBuildPhase section */
118 | 02D3BAA42D6646210091E114 /* Sources */ = {
119 | isa = PBXSourcesBuildPhase;
120 | buildActionMask = 2147483647;
121 | files = (
122 | );
123 | runOnlyForDeploymentPostprocessing = 0;
124 | };
125 | /* End PBXSourcesBuildPhase section */
126 |
127 | /* Begin XCBuildConfiguration section */
128 | 02D3BAB42D6646230091E114 /* Debug */ = {
129 | isa = XCBuildConfiguration;
130 | buildSettings = {
131 | ALWAYS_SEARCH_USER_PATHS = NO;
132 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
133 | CLANG_ANALYZER_NONNULL = YES;
134 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
135 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
136 | CLANG_ENABLE_MODULES = YES;
137 | CLANG_ENABLE_OBJC_ARC = YES;
138 | CLANG_ENABLE_OBJC_WEAK = YES;
139 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
140 | CLANG_WARN_BOOL_CONVERSION = YES;
141 | CLANG_WARN_COMMA = YES;
142 | CLANG_WARN_CONSTANT_CONVERSION = YES;
143 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
144 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
145 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
146 | CLANG_WARN_EMPTY_BODY = YES;
147 | CLANG_WARN_ENUM_CONVERSION = YES;
148 | CLANG_WARN_INFINITE_RECURSION = YES;
149 | CLANG_WARN_INT_CONVERSION = YES;
150 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
151 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
152 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
153 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
154 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
155 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
156 | CLANG_WARN_STRICT_PROTOTYPES = YES;
157 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
158 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
159 | CLANG_WARN_UNREACHABLE_CODE = YES;
160 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
161 | COPY_PHASE_STRIP = NO;
162 | DEBUG_INFORMATION_FORMAT = dwarf;
163 | ENABLE_STRICT_OBJC_MSGSEND = YES;
164 | ENABLE_TESTABILITY = YES;
165 | ENABLE_USER_SCRIPT_SANDBOXING = YES;
166 | GCC_C_LANGUAGE_STANDARD = gnu17;
167 | GCC_DYNAMIC_NO_PIC = NO;
168 | GCC_NO_COMMON_BLOCKS = YES;
169 | GCC_OPTIMIZATION_LEVEL = 0;
170 | GCC_PREPROCESSOR_DEFINITIONS = (
171 | "DEBUG=1",
172 | "$(inherited)",
173 | );
174 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
175 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
176 | GCC_WARN_UNDECLARED_SELECTOR = YES;
177 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
178 | GCC_WARN_UNUSED_FUNCTION = YES;
179 | GCC_WARN_UNUSED_VARIABLE = YES;
180 | IPHONEOS_DEPLOYMENT_TARGET = 18.1;
181 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
182 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
183 | MTL_FAST_MATH = YES;
184 | ONLY_ACTIVE_ARCH = YES;
185 | SDKROOT = iphoneos;
186 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
187 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
188 | };
189 | name = Debug;
190 | };
191 | 02D3BAB52D6646230091E114 /* Release */ = {
192 | isa = XCBuildConfiguration;
193 | buildSettings = {
194 | ALWAYS_SEARCH_USER_PATHS = NO;
195 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
196 | CLANG_ANALYZER_NONNULL = YES;
197 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
198 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
199 | CLANG_ENABLE_MODULES = YES;
200 | CLANG_ENABLE_OBJC_ARC = YES;
201 | CLANG_ENABLE_OBJC_WEAK = YES;
202 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
203 | CLANG_WARN_BOOL_CONVERSION = YES;
204 | CLANG_WARN_COMMA = YES;
205 | CLANG_WARN_CONSTANT_CONVERSION = YES;
206 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
207 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
208 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
209 | CLANG_WARN_EMPTY_BODY = YES;
210 | CLANG_WARN_ENUM_CONVERSION = YES;
211 | CLANG_WARN_INFINITE_RECURSION = YES;
212 | CLANG_WARN_INT_CONVERSION = YES;
213 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
214 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
215 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
216 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
217 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
218 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
219 | CLANG_WARN_STRICT_PROTOTYPES = YES;
220 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
221 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
222 | CLANG_WARN_UNREACHABLE_CODE = YES;
223 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
224 | COPY_PHASE_STRIP = NO;
225 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
226 | ENABLE_NS_ASSERTIONS = NO;
227 | ENABLE_STRICT_OBJC_MSGSEND = YES;
228 | ENABLE_USER_SCRIPT_SANDBOXING = YES;
229 | GCC_C_LANGUAGE_STANDARD = gnu17;
230 | GCC_NO_COMMON_BLOCKS = YES;
231 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
232 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
233 | GCC_WARN_UNDECLARED_SELECTOR = YES;
234 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
235 | GCC_WARN_UNUSED_FUNCTION = YES;
236 | GCC_WARN_UNUSED_VARIABLE = YES;
237 | IPHONEOS_DEPLOYMENT_TARGET = 18.1;
238 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
239 | MTL_ENABLE_DEBUG_INFO = NO;
240 | MTL_FAST_MATH = YES;
241 | SDKROOT = iphoneos;
242 | SWIFT_COMPILATION_MODE = wholemodule;
243 | VALIDATE_PRODUCT = YES;
244 | };
245 | name = Release;
246 | };
247 | 02D3BAB72D6646230091E114 /* Debug */ = {
248 | isa = XCBuildConfiguration;
249 | buildSettings = {
250 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
251 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
252 | CODE_SIGN_STYLE = Automatic;
253 | CURRENT_PROJECT_VERSION = 1;
254 | DEVELOPMENT_ASSET_PATHS = "\"StickyHeader/Preview Content\"";
255 | DEVELOPMENT_TEAM = 4G76GHV9RM;
256 | ENABLE_PREVIEWS = YES;
257 | GENERATE_INFOPLIST_FILE = YES;
258 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
259 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
260 | INFOPLIST_KEY_UILaunchScreen_Generation = YES;
261 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
262 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
263 | LD_RUNPATH_SEARCH_PATHS = (
264 | "$(inherited)",
265 | "@executable_path/Frameworks",
266 | );
267 | MARKETING_VERSION = 1.0;
268 | PRODUCT_BUNDLE_IDENTIFIER = com.leopoldromanowski.StickyHeader;
269 | PRODUCT_NAME = "$(TARGET_NAME)";
270 | SWIFT_EMIT_LOC_STRINGS = YES;
271 | SWIFT_VERSION = 5.0;
272 | TARGETED_DEVICE_FAMILY = "1,2";
273 | };
274 | name = Debug;
275 | };
276 | 02D3BAB82D6646230091E114 /* Release */ = {
277 | isa = XCBuildConfiguration;
278 | buildSettings = {
279 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
280 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
281 | CODE_SIGN_STYLE = Automatic;
282 | CURRENT_PROJECT_VERSION = 1;
283 | DEVELOPMENT_ASSET_PATHS = "\"StickyHeader/Preview Content\"";
284 | DEVELOPMENT_TEAM = 4G76GHV9RM;
285 | ENABLE_PREVIEWS = YES;
286 | GENERATE_INFOPLIST_FILE = YES;
287 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
288 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
289 | INFOPLIST_KEY_UILaunchScreen_Generation = YES;
290 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
291 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
292 | LD_RUNPATH_SEARCH_PATHS = (
293 | "$(inherited)",
294 | "@executable_path/Frameworks",
295 | );
296 | MARKETING_VERSION = 1.0;
297 | PRODUCT_BUNDLE_IDENTIFIER = com.leopoldromanowski.StickyHeader;
298 | PRODUCT_NAME = "$(TARGET_NAME)";
299 | SWIFT_EMIT_LOC_STRINGS = YES;
300 | SWIFT_VERSION = 5.0;
301 | TARGETED_DEVICE_FAMILY = "1,2";
302 | };
303 | name = Release;
304 | };
305 | /* End XCBuildConfiguration section */
306 |
307 | /* Begin XCConfigurationList section */
308 | 02D3BAA32D6646210091E114 /* Build configuration list for PBXProject "StickyHeader" */ = {
309 | isa = XCConfigurationList;
310 | buildConfigurations = (
311 | 02D3BAB42D6646230091E114 /* Debug */,
312 | 02D3BAB52D6646230091E114 /* Release */,
313 | );
314 | defaultConfigurationIsVisible = 0;
315 | defaultConfigurationName = Release;
316 | };
317 | 02D3BAB62D6646230091E114 /* Build configuration list for PBXNativeTarget "StickyHeader" */ = {
318 | isa = XCConfigurationList;
319 | buildConfigurations = (
320 | 02D3BAB72D6646230091E114 /* Debug */,
321 | 02D3BAB82D6646230091E114 /* Release */,
322 | );
323 | defaultConfigurationIsVisible = 0;
324 | defaultConfigurationName = Release;
325 | };
326 | /* End XCConfigurationList section */
327 | };
328 | rootObject = 02D3BAA02D6646210091E114 /* Project object */;
329 | }
330 |
--------------------------------------------------------------------------------