https://github.com/davidask/layoutaid
Declarative AutoLayout DSL and utilities for iOS, tvOS, and macOS
https://github.com/davidask/layoutaid
Last synced: 3 months ago
JSON representation
Declarative AutoLayout DSL and utilities for iOS, tvOS, and macOS
- Host: GitHub
- URL: https://github.com/davidask/layoutaid
- Owner: davidask
- License: mit
- Created: 2020-05-29T22:43:33.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2020-12-27T19:43:14.000Z (almost 5 years ago)
- Last Synced: 2025-07-20T04:56:30.191Z (4 months ago)
- Language: Swift
- Size: 36.1 KB
- Stars: 3
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README

# LayoutAid
AutoLayout extensions for iOS, macOS, and tvOS.
## Features
- [x] Declarative DSL for creating layout constraints
- [x] `keyboardLayoutGuide` for `UIView` on iOS, fully animatable
- [x] `keyboardSafeAreaLayoutGuide` for `UIView` on iOS, fully animatable
- [x] Extensions for `UIScrollView` adjusting `contentInset` based on keyboard appearance
## Requirements
- iOS 11+
- tvOS 11+
- macOS 10.11+
## Installation
### Carthage
Create a `Cartfile` that lists the framework and run `carthage update`. Follow the [instructions](https://github.com/Carthage/Carthage#if-youre-building-for-ios) to add `$(SRCROOT)/Carthage/Build/iOS/LayoutAid.framework` to an iOS project.
```
github "davidask/LayoutAid"
```
### Swift Package Manager
This project has support for Swift Package Manager.
## Usage
To use the extensions provided in this library, you must `import LayoutAid`.
### Layout DSL
```swift
NSLayoutConstraint.activate {
containerView.anchor(
Edges(equalTo: view.layoutMarginsGuide)
)
iconView.anchor {
Width(equalTo: 50)
AspectRatio(equalTo: 1)
Center(equalTo: containerView)
}
label.anchor {
Top(equalToSystemSpacingBelow: iconView)
CenterX(equalTo: containerView.readableContentGuide)
Width(lessThanOrEqualTo: containerView.readableContentGuide, multiplier: 0.5)
}
}
```
Constraints are best activated in bulk, however, creating complex layouts can get verbose, even with layout anchors. This library provides two static methods on `NSLayoutConstraint` using function builders:
- `build`, for creating constraints using a function builder
- `activate`, for creating and activating constraints using a function builder
To constrain a view or layout guide use `view.anchor` or `layoutGuide.anchor`. Constrain blocks can be used inside `NSLayoutConstraint.build` or `NSLayoutConstraint.activate`.
This library aligns its semantics with Apples layout anchor API, meaning that you'll find a constraint builder for each anchor type, including convenience builders.
* `Leading`
* `Trailing`
* `Left`
* `Right`
* `Top`
* `Bottom`
* `CenterX`
* `CenterY`
* `Center`
* `Edges`
* `DirectionalEdges`
* `Size`
* `AspectRatio`
### Keyboard layout guides
Keyboard management in iOS can be tricky. This library provides a lazy accessor to `keyboardLayoutGuide` and `keyboardSafeAreaLayoutGuide`. Backed by a `Keyboard` type observing the keyboard state this allows you to easily layout your views with the keyboard in mind.
```swift
NSLayoutConstraint.activate {
keyboardBackgroundView.anchor(
Edges(equalTo: view.keyboardLayoutGuide)
)
keyboardAvoidingView.anchor {
Leading(equalTo: view)
Trailing(equalTo: view)
Top(equalTo: view.safeAreaLayoutGuide)
Bottom(lessThanOrEqualTo: view.keyboardSafeAreaLayoutGuide)
}
}
```
### UIScrollView extensions
This library can automatically adjust `contentInset` of `UIScrollView` based on keyboard appearance using
- `UIScrollView.adjustContentInsetForKeyboard()`, to immediately adjust scroll view insets to keyboard
- `UIScrollView.beginAdjustingContentInsetForKeyboard()`, to start observing keyboard adjusting scroll view insets automatically
- `UIScrollView.endAdjustingContentInsetForKeyboard()`, to stop observing keyboard adjusting scroll view insets automatically
## Contribute
Please feel welcome contributing to **LayoutAid**, check the ``LICENSE`` file for more info.
## Credits
David Ask