TestsTested | ✓ |
LangLanguage | SwiftSwift |
License | MIT |
ReleasedLast Release | Nov 2017 |
SwiftSwift Version | 4.0 |
SPMSupports SPM | ✗ |
Maintained by Dale Webster.
EverLayout translates JSON/XML data into iOS layouts which can be downloaded, reused and updated at runtime.
More detailed documentation here.
The documentation was most recently updated for version 0.9.3.
Add EverLayout to your Podfile
platform :ios, '8.0'
use_frameworks!
pod 'Everlayout'
Create a Cartfile that lists the framework and run carthage update.
github "acrocat/EverLayout"
EverLayout Bridge can be installed via Node Package Manager.
npm install -g ever-layout-bridge
More info here
{
"name":"ViewController",
"root":{
"views":{
"exampleButton":{
"constraints":{
"center":"@super",
"width":"+120",
"height":"+80"
},
"properties":{
"text":"Tap Me!"
}
}
}
}
}
import UIKit
import EverLayout
class ViewController: UIViewController {
private var layout : EverLayout?
public let exampleButton : UIButton = UIButton()
override func viewDidLoad() {
super.viewDidLoad()
let layoutData = NSData(contentsOfFile: Bundle.main.path(forResource: "ViewController", ofType: "json", inDirectory: "Layouts")!) as! Data
self.layout = EverLayout(layoutData: layoutData)
self.layout?.build(onView: self.view, viewEnvironment: self)
}
}
{
"name":"ViewController",
"root":{
"views":{
"!redSquare":{
"constraints": {
"width height":"+180",
"center":"@super <24"
},
"properties":{
"backgroundColor":"red"
}
}
}
}
}
Here I am running a blank application in the simulator side-by-side
with a ViewController layout described in JSON, which is loaded by the default
View Controller. The app has connected to EverLayout Bridge
which is serving it layout updates ever time I save the layout file.
In the example I am just changing the properties of a UIView
to show how layouts can be designed/built without having to re-compile
the app.
At the moment EverLayout is more of an experiment than a solution.
The idea was born through frustration of Interface Builder
and the existing alternative of clunky layout code.
The goal of this project is to find a middle ground which can offer the real-time
'visual' approach of IB, and the flexibility and re-usability of
layouts described with code.
Building and distributing iOS Layouts with EverLayout
Contributions to EverLayout are welcome! If you have feature requests please raise an issue, or contact me at [email protected], or @greatirl.