Book Image

An iOS Developer's Guide to SwiftUI

By : Michele Fadda
Book Image

An iOS Developer's Guide to SwiftUI

By: Michele Fadda

Overview of this book

– SwiftUI transforms Apple Platform app development with intuitive Swift code for seamless UI design. – Explore SwiftUI's declarative programming: define what the app should look like and do, while the OS handles the heavy lifting. – Hands-on approach covers SwiftUI fundamentals and often-omitted parts in introductory guides. – Progress from creating views and modifiers to intricate, responsive UIs and advanced techniques for complex apps. – Focus on new features in asynchronous programming and architecture patterns for efficient, modern app design. – Learn UIKit and SwiftUI integration, plus how to run tests for SwiftUI applications. – Gain confidence to harness SwiftUI's full potential for building professional-grade apps across Apple devices.
Table of Contents (25 chapters)
Free Chapter
1
Part 1: Simple Views
5
Part 2: Scrollable Views
8
Part 3: SwiftUI Navigation
11
Part 4: Graphics and Animation
14
Part 5: App Architecture
17
Part 6: Beyond Basics

Custom layout

Suppose that you have some special requirement for the design of the layout of a “grid” that cannot be achieved by placing items on an orthogonal geometrical grid. Instead, you would like them to be positioned according to some other arbitrary geometrical requirement that is not implemented natively in SwiftUI.

In SwiftUI, Layout is a protocol that allows you to precisely create your own custom layouts to arrange subviews within a container, according to your own geometrical choice.

By conforming to Layout, you can design layouts to fit your own design requirements. In order to create a custom layout, you need to implement two main functions:

  • sizeThatFits(proposal:subviews:cache:): This function calculates the ideal size for the layout based on the proposed size and the cell it contains. It returns a CGSize that represents the ideal size for the layout.
  • placeSubviews(in:proposal:subviews:cache:): This function is responsible for computing...