A custom AutoLayout DSL wrapper building on top of the amazing work of John Sundell in the blog post Building DSLs in Swift.
To run the example project, clone the repo, and run pod install
from the Example directory first.
iOS 11.0+
KoalaTeaAutoLayout is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod 'KoalaTeaAutoLayout'
Always have to import first
import KoalaTeaAutoLayout
And then you can use the library like so:
let layoutView = UIView()
self.view.addSubview(layoutView)
layoutView.backgroundColor = .red
layoutView.layout {
$0.top == self.view.safeAreaLayoutGuide.topAnchor
$0.leading == self.view.leadingAnchor + 20
$0.trailing == self.view.trailingAnchor - 20
$0.height.equal(to: self.view.heightAnchor, multiplier: 0.1)
}
or you could have the constraints returned and activate/deactivate them at will:
var constraints1: [NSLayoutConstraint] = []
var constraints2: [NSLayoutConstraint] = []
self.view.addSubview(layoutView)
layoutView.backgroundColor = .blue
constraints1 = layoutView.returnedLayout {
return [
$0.centerXAnchor == self.view.centerXAnchor,
$0.bottom == self.view.safeAreaLayoutGuide.bottomAnchor,
$0.height == 80,
$0.width == $0.height + 100,
]
}
constraints2 = layoutView.returnedLayout {
return [
$0.top == layoutView2.bottomAnchor,
$0.centerXAnchor == self.view.centerXAnchor,
$0.height == 80,
$0.width == $0.height + 100,
]
}
constraints2.deactivateAll()
animate()
func animate() {
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
self.constraints1.deactivateAll()
self.constraints2.activateAll()
UIView.animate(withDuration: 0.5, animations: {
self.view.layoutIfNeeded()
}, completion: { _ in
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
self.constraints2.deactivateAll()
self.constraints1.activateAll()
UIView.animate(withDuration: 0.5, animations: {
self.view.layoutIfNeeded()
}, completion: { _ in
self.animate()
})
}
})
}
}
There are also some convenience functions setup for common use cases:
let edgesToSuperview = UIView()
edgesToSuperview.constrainEdgesToSuperview()
let centerToSuperview = UIView()
centerToSuperview.constrainCenterToSuperview()
let edgesToAnotherView = UIView()
edgesToAnotherView.constrainEdges(to: centerToSuperview)
Open an issue.
Open a PR.
or shoot me an email and I'll get back to you.
Craig Holliday
email: [email protected]
twitter: https://twitter.com/TheMrHolliday
KoalaTeaAutoLayout is available under the MIT license. See the LICENSE file for more info.