mirror of https://github.com/SnapKit/SnapKit
Updated docs
This commit is contained in:
parent
6d7aa5f230
commit
ce3c3d1fd8
125
docs.md
125
docs.md
|
@ -5,34 +5,45 @@ id: docs
|
||||||
---
|
---
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
* iOS 7.0+ / OS X 10.9+
|
- iOS 8.0+ / Mac OS X 10.11+ / tvOS 9.0+
|
||||||
* Swift 2.0
|
- Xcode 8.0+
|
||||||
* Xcode 7.0+
|
- Swift 3.0+
|
||||||
|
|
||||||
> While SnapKit supports iOS 7.0 and OS X 10.9 these are considered legacy platforms, so you must manually integrate the source files directly. Please see the [Legacy Platforms](/legacy-platforms) page for more information and steps.
|
## Migration Guides
|
||||||
|
|
||||||
## Installing
|
- [SnapKit 3.0 Migration Guide](https://github.com/SnapKit/SnapKit/blob/master/Documentation/SnapKit%203.0%20Migration%20Guide.md)
|
||||||
|
|
||||||
The first thing you’ll need to do with SnapKit is get it installed into your project. We support three different integrations:
|
## Communication
|
||||||
|
|
||||||
### Cocoapods
|
- If you **need help**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/snapkit). (Tag 'snapkit')
|
||||||
|
- If you'd like to **ask a general question**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/snapkit).
|
||||||
|
- If you **found a bug**, open an issue.
|
||||||
|
- If you **have a feature request**, open an issue.
|
||||||
|
- If you **want to contribute**, submit a pull request.
|
||||||
|
|
||||||
[CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects.
|
|
||||||
|
|
||||||
CocoaPods 0.36 adds supports for Swift and embedded frameworks. You can install it with the following command:
|
## Installation
|
||||||
|
|
||||||
|
### CocoaPods
|
||||||
|
|
||||||
|
[CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects. You can install it with the following command:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ gem install cocoapods
|
$ gem install cocoapods
|
||||||
```
|
```
|
||||||
|
|
||||||
|
> CocoaPods 1.1.0+ is required to build SnapKit 3.0.0+.
|
||||||
|
|
||||||
To integrate SnapKit into your Xcode project using CocoaPods, specify it in your `Podfile`:
|
To integrate SnapKit into your Xcode project using CocoaPods, specify it in your `Podfile`:
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
source 'https://github.com/CocoaPods/Specs.git'
|
source 'https://github.com/CocoaPods/Specs.git'
|
||||||
platform :ios, '8.0'
|
platform :ios, '10.0'
|
||||||
use_frameworks!
|
use_frameworks!
|
||||||
|
|
||||||
pod 'SnapKit', '~> 0.15.0'
|
target '<Your Target Name>' do
|
||||||
|
pod 'SnapKit', '~> 3.0'
|
||||||
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
Then, run the following command:
|
Then, run the following command:
|
||||||
|
@ -43,7 +54,7 @@ $ pod install
|
||||||
|
|
||||||
### Carthage
|
### Carthage
|
||||||
|
|
||||||
Carthage is a decentralized dependency manager that automates the process of adding frameworks to your Cocoa application.
|
[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks.
|
||||||
|
|
||||||
You can install Carthage with [Homebrew](http://brew.sh/) using the following command:
|
You can install Carthage with [Homebrew](http://brew.sh/) using the following command:
|
||||||
|
|
||||||
|
@ -54,24 +65,17 @@ $ brew install carthage
|
||||||
|
|
||||||
To integrate SnapKit into your Xcode project using Carthage, specify it in your `Cartfile`:
|
To integrate SnapKit into your Xcode project using Carthage, specify it in your `Cartfile`:
|
||||||
|
|
||||||
```
|
```ogdl
|
||||||
github "SnapKit/SnapKit" >= 0.15.0
|
github "SnapKit/SnapKit" ~> 3.0
|
||||||
```
|
```
|
||||||
|
|
||||||
### Embedded Framework
|
Run `carthage update` to build the framework and drag the built `SnapKit.framework` into your Xcode project.
|
||||||
|
|
||||||
- Add SnapKit as a [submodule](http://git-scm.com/docs/git-submodule) by opening the Terminal, `cd`-ing into your top-level project directory, and entering the following command:
|
### Manually
|
||||||
|
|
||||||
```bash
|
If you prefer not to use either of the aforementioned dependency managers, you can integrate SnapKit into your project manually.
|
||||||
$ git submodule add https://github.com/SnapKit/SnapKit.git
|
|
||||||
```
|
|
||||||
|
|
||||||
- Open the `SnapKit` folder, and drag `SnapKit.xcodeproj` into the file navigator of your app project.
|
---
|
||||||
- In Xcode, navigate to the target configuration window by clicking on the blue project icon, and selecting the application target under the "Targets" heading in the sidebar.
|
|
||||||
- Ensure that the deployment target of `SnapKit.framework` matches that of the application target.
|
|
||||||
- In the tab bar at the top of that window, open the "Build Phases" panel.
|
|
||||||
- Expand the "Target Dependencies" group, and add `SnapKit.framework`.
|
|
||||||
- Click on the `+` button at the top left of the panel and select "New Copy Files Phase". Rename this new phase to "Copy Frameworks", set the "Destination" to "Frameworks", and add `SnapKit.framework`.
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
@ -81,7 +85,7 @@ SnapKit is designed to be extremely easy to use. Let's say we want to layout a b
|
||||||
let box = UIView()
|
let box = UIView()
|
||||||
superview.addSubview(box)
|
superview.addSubview(box)
|
||||||
|
|
||||||
box.snp_makeConstraints { (make) -> Void in
|
box.snp.makeConstraints { (make) -> Void in
|
||||||
make.top.equalTo(superview).offset(20)
|
make.top.equalTo(superview).offset(20)
|
||||||
make.left.equalTo(superview).offset(20)
|
make.left.equalTo(superview).offset(20)
|
||||||
make.bottom.equalTo(superview).offset(-20)
|
make.bottom.equalTo(superview).offset(-20)
|
||||||
|
@ -95,7 +99,7 @@ Or even shorter:
|
||||||
let box = UIView()
|
let box = UIView()
|
||||||
superview.addSubview(box)
|
superview.addSubview(box)
|
||||||
|
|
||||||
box.snp_makeConstraints { (make) -> Void in
|
box.snp.makeConstraints { (make) -> Void in
|
||||||
make.edges.equalTo(superview).inset(UIEdgeInsetsMake(20, 20, 20, 20))
|
make.edges.equalTo(superview).inset(UIEdgeInsetsMake(20, 20, 20, 20))
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
@ -119,22 +123,22 @@ These three equality constraints accept one argument which can be any of the fol
|
||||||
#### 1. ViewAttribute
|
#### 1. ViewAttribute
|
||||||
|
|
||||||
```
|
```
|
||||||
make.centerX.lessThanOrEqualTo(view2.snp_left)
|
make.centerX.lessThanOrEqualTo(view2.snp.left)
|
||||||
```
|
```
|
||||||
|
|
||||||
ViewAttribute | NSLayoutAttribute
|
ViewAttribute | NSLayoutAttribute
|
||||||
------------------------- | --------------------------
|
------------------------- | --------------------------
|
||||||
view.snp_left | NSLayoutAttribute.Left
|
view.snp.left | NSLayoutAttribute.left
|
||||||
view.snp_right | NSLayoutAttribute.Right
|
view.snp.right | NSLayoutAttribute.right
|
||||||
view.snp_top | NSLayoutAttribute.Top
|
view.snp.top | NSLayoutAttribute.top
|
||||||
view.snp_bottom | NSLayoutAttribute.Bottom
|
view.snp.bottom | NSLayoutAttribute.bottom
|
||||||
view.snp_leading | NSLayoutAttribute.Leading
|
view.snp.leading | NSLayoutAttribute.leading
|
||||||
view.snp_trailing | NSLayoutAttribute.Trailing
|
view.snp.trailing | NSLayoutAttribute.trailing
|
||||||
view.snp_width | NSLayoutAttribute.Width
|
view.snp.width | NSLayoutAttribute.width
|
||||||
view.snp_height | NSLayoutAttribute.Height
|
view.snp.height | NSLayoutAttribute.height
|
||||||
view.snp_centerX | NSLayoutAttribute.CenterX
|
view.snp.centerX | NSLayoutAttribute.centerX
|
||||||
view.snp_centerY | NSLayoutAttribute.CenterY
|
view.snp.centerY | NSLayoutAttribute.centerY
|
||||||
view.snp_baseline | NSLayoutAttribute.Baseline
|
view.snp.lastBaseline | NSLayoutAttribute.lastBaseline
|
||||||
|
|
||||||
|
|
||||||
#### 2. UIView/NSView
|
#### 2. UIView/NSView
|
||||||
|
@ -144,7 +148,7 @@ if you want view.left to be greater than or equal to label.left:
|
||||||
```
|
```
|
||||||
// these two constraints are exactly the same
|
// these two constraints are exactly the same
|
||||||
make.left.greaterThanOrEqualTo(label)
|
make.left.greaterThanOrEqualTo(label)
|
||||||
make.left.greaterThanOrEqualTo(label.snp_left)
|
make.left.greaterThanOrEqualTo(label.snp.left)
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 3. Strict Checks
|
#### 3. Strict Checks
|
||||||
|
@ -180,17 +184,10 @@ make.left.equalTo(view).offset(UIEdgeInsetsMake(10, 0, 10, 0))
|
||||||
|
|
||||||
> `.prority` allows you to specify an exact priority
|
> `.prority` allows you to specify an exact priority
|
||||||
|
|
||||||
> `.priorityHigh` equivalent to **UILayoutPriority.DefaultHigh**
|
|
||||||
|
|
||||||
> `.priorityMedium` is half way between high and low
|
|
||||||
|
|
||||||
> `.priorityLow` equivalent to **UILayoutPriority.DefaultLow**
|
|
||||||
|
|
||||||
Priorities are can be tacked on to the end of a constraint chain like so:
|
Priorities are can be tacked on to the end of a constraint chain like so:
|
||||||
|
|
||||||
```
|
```
|
||||||
make.left.greaterThanOrEqualTo(label.snp_left).priorityLow()
|
make.top.equalTo(label.snp.top).priority(600)
|
||||||
make.top.equalTo(label.snp_top).priority(600)
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Composition, composition, composition
|
### Composition, composition, composition
|
||||||
|
@ -251,7 +248,7 @@ var topConstraint: Constraint? = nil
|
||||||
...
|
...
|
||||||
|
|
||||||
// when making constraints
|
// when making constraints
|
||||||
view1.snp_makeConstraints { (make) -> Void in
|
view1.snp.makeConstraints { (make) -> Void in
|
||||||
self.topConstraint = make.top.equalTo(superview).offset(padding.top).constraint
|
self.topConstraint = make.top.equalTo(superview).offset(padding.top).constraint
|
||||||
make.left.equalTo(superview).offset(padding.left)
|
make.left.equalTo(superview).offset(padding.left)
|
||||||
}
|
}
|
||||||
|
@ -264,35 +261,35 @@ self.topConstraint.uninstall()
|
||||||
self.topConstraint.updateOffset(5)
|
self.topConstraint.updateOffset(5)
|
||||||
```
|
```
|
||||||
|
|
||||||
### 2. snp_updateConstraints
|
### 2. snp.updateConstraints
|
||||||
|
|
||||||
Alternative if you are only updating the **constant** value of the constraint you can use the method `snp_updateConstraints` instead of `snp_makeConstraints`
|
Alternative if you are only updating the **constant** value of the constraint you can use the method `snp.updateConstraints` instead of `snp.makeConstraints`
|
||||||
|
|
||||||
```
|
```
|
||||||
// this is Apple's recommended place for adding/updating constraints
|
// this is Apple's recommended place for adding/updating constraints
|
||||||
// this method can get called multiple times in response to setNeedsUpdateConstraints
|
// this method can get called multiple times in response to setNeedsUpdateConstraints
|
||||||
// which can be called by UIKit internally or in your code if you need to trigger an update to your constraints
|
// which can be called by UIKit internally or in your code if you need to trigger an update to your constraints
|
||||||
override func updateConstraints() {
|
override func updateConstraints() {
|
||||||
self.growingButton.snp_updateConstraints { (make) -> Void in
|
self.growingButton.snp.updateConstraints { (make) -> Void in
|
||||||
make.center.equalTo(self);
|
make.center.equalTo(self);
|
||||||
make.width.equalTo(self.buttonSize.width).priorityLow()
|
make.width.equalTo(self.buttonSize.width).priority(250)
|
||||||
make.height.equalTo(self.buttonSize.height).priorityLow()
|
make.height.equalTo(self.buttonSize.height).priority(250)
|
||||||
make.width.lessThanOrEqualTo(self)
|
make.width.lessThanOrEqualTo(self)
|
||||||
make.height.lessThanOrEqualTo(self)
|
make.height.lessThanOrEqualTo(self)
|
||||||
}
|
}
|
||||||
|
|
||||||
// according to apple super should be called at end of method
|
// according to Apple super should be called at end of method
|
||||||
super.updateConstraints()
|
super.updateConstraints()
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. snp_remakeConstraints
|
### 3. snp.remakeConstraints
|
||||||
|
|
||||||
`snp_remakeConstraints` is similar to `snp_makeConstraints`, but will first remove all existing constraints installed by SnapKit.
|
`snp.remakeConstraints` is similar to `snp.makeConstraints`, but will first remove all existing constraints installed by SnapKit.
|
||||||
|
|
||||||
```
|
```
|
||||||
func changeButtonPosition() {
|
func changeButtonPosition() {
|
||||||
self.button.snp_remakeConstraints { (make) -> Void in
|
self.button.snp.remakeConstraints { (make) -> Void in
|
||||||
make.size.equalTo(self.buttonSize)
|
make.size.equalTo(self.buttonSize)
|
||||||
|
|
||||||
if topLeft {
|
if topLeft {
|
||||||
|
@ -304,15 +301,3 @@ func changeButtonPosition() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
* Not limited to a subset of Auto Layout. Anything NSLayoutConstraint can do SnapKit can also do.
|
|
||||||
* Better debugging support to help find breaking constraints.
|
|
||||||
* No crazy operator overloads.
|
|
||||||
* Not string or dictionary based and you get the strictest compile time checks possible.
|
|
||||||
|
|
||||||
## TODO
|
|
||||||
|
|
||||||
* Example Projects
|
|
||||||
* Better Debugging Support
|
|
||||||
|
|
6
faq.md
6
faq.md
|
@ -7,11 +7,7 @@ permalink: /faq/
|
||||||
|
|
||||||
#### CocoaPods won't let me install SnapKit into my iOS 7.0 project?
|
#### CocoaPods won't let me install SnapKit into my iOS 7.0 project?
|
||||||
|
|
||||||
SnapKit doesn't use any iOS 8.0 specific APIs, but since Xcode does not support integrating Swift code without dynamic frameworks it cannot be integrated via a framework for iOS 7.0 deployments. You should instead embed the source code directly into your application. See the [Legacy Platforms](/legacy-platforms) documentation.
|
SnapKit no longer supports iOS 7.0. While you may find a way to integrate it manually on your own we do not support it and respectfully please do not open issues relating to iOS 7.0 integration.
|
||||||
|
|
||||||
#### Do you have any examples?
|
|
||||||
|
|
||||||
We're working on getting some great examples! Stay tuned.
|
|
||||||
|
|
||||||
#### What about Swift's operator overloading?
|
#### What about Swift's operator overloading?
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ let container = UIView()
|
||||||
|
|
||||||
container.addSubview(box)
|
container.addSubview(box)
|
||||||
|
|
||||||
box.snp_makeConstraints { (make) -> Void in
|
box.snp.makeConstraints { (make) -> Void in
|
||||||
make.size.equalTo(50)
|
make.size.equalTo(50)
|
||||||
make.center.equalTo(container)
|
make.center.equalTo(container)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,20 +0,0 @@
|
||||||
---
|
|
||||||
layout: default
|
|
||||||
id: legacy-platforms
|
|
||||||
permalink: /legacy-platforms/
|
|
||||||
---
|
|
||||||
## Legacy Platforms
|
|
||||||
|
|
||||||
If you want to use SnapKit with iOS 7.0 or OS X 10.9 you need to do a few things differently, and unfortunately manually.
|
|
||||||
|
|
||||||
#### Step 1. Integrate source code
|
|
||||||
|
|
||||||
Integrate all the `*.swift` source files in the repo into your project. We recommend using a submodule to keep the source files in sync and then dragging them into your Xcode Project.
|
|
||||||
|
|
||||||
#### Step 2. Add build setting
|
|
||||||
|
|
||||||
You must add `-DSNAPKIT_DEPLOYMENT_LEGACY` to your `OTHER_SWIFT_FLAGS` in your targets Build Settings. We require this because we couldn't find another way to allow warning free compilation on both legacy platforms that don't support frameworks and modern platforms that do.
|
|
||||||
|
|
||||||
#### Step 3. Use SnapKit
|
|
||||||
|
|
||||||
You should now be able to use `snp_makeConstraints` on any of your views. You do not need to add the `import SnapKit` statement since the source is directly integrated into your target.
|
|
Loading…
Reference in New Issue