- SwiftUI is not able to render more than 10 child elements per parent
- Multiple
Group
elements mitigate this limitation
- No visual effect, used to display more than 10 child elements
- Multiple
Section
elements enable the same
- Visually separated, see iOS Settings view for an example
- Safe space:
- Space on the display where it is safe to display things without running into possible problems (e.g. occlusion)
- On modern iPhones the safe space goes from below the notch down to the home indicator
- For scrollable elements like a
Form
this might cause problems, as it will be hidden behind the notch (and the clock) on scroll
- Adding a navigation bar by wrapping a view inside a
NavigationView
avoids this problem as it properly scrolls behind the top navigation bar
- If we want to set a title on the navigation bar we can do this by:
- Adding the
.navigationTitle(title: string)
modifier to the wrapped element will set a large title (like on the main screen of iOS settings)
- Adding the additional modifier
.navigationBarTitleDisplayMode(.inline)
will display a small title, like on the subsequent settings pages on iOS
- State
- SwiftUI relies on immutable structs instead of classes for views
- Views are re-rendered multiple times, having immutable data avoids side-effects
- Thus, it's not possible to store state in plain struct fields
- The special SwiftUI property wrapper
@State
solves this issue
- Stores data in a separate, modifiable place.
- So every
@State
property is effectively a reference?