Skip to content

πŸš€ Super fast Layout Engine. Concise syntax, easy readable and maintainable code. Chainable. Write less code for laying out views. [iOS/Swift/Objc]

License

Notifications You must be signed in to change notification settings

DenisLitvin/ClipLayout

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

55 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

ClipLayout

Version License Platform

Example

To run the example project, clone the repo, and run pod install from the Example directory first.

Installation

ClipLayout is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod 'ClipLayout'

πŸ’« Expressiveness

It's easy to read and takes only few lines of code to make complex layout.

πŸš€ Performance

It's the fastest Layout Engine compared to other popular libraries.

πŸ“ Automatic estimations

You don't have to specify the size. ClipLayout will try to estimate how much space the view needs for it's content. And place subview in the center of the superview by default.

βœ‚οΈ Trimming

If views don't fit on the screen their size will be adjusted.

✨ Animations out of the box

It's easy to animate changes in Clip Layout. Just alter the layout however you want and call clip.invalidateLayout() on the superview in animation context.

view.clip.withDistribution(flag ? .column : .row)
UIView.animate(withDuration: 0.8) {
    self.superview.clip.invalidateLayout()
}

πŸ™‹β€β™‚οΈ RTL language support

RTL support is enabled by default on any view. If you use distribution == .row, views will be mirrored in horizontal axis. To disable RTL set supportRightToLeft = false.

🍻 Interoperability

You can mix and match ClipLayout with Auto Layout or any other framework. You only need to specify property on UIView enable = true on parent and descendant views that use Clip Layout.

πŸŽ› Dynamic Collection Cells

You set up the Cell that conforms to DataBinder and inherits ClipCell

class DynamicCell: ClipCell, DataBinder {
  func set(data: SomeData) {
  }
 }

Then you just use ClipCollectionView with your cell as a generic parameter and everything will be automaticaly handled. You can optionaly set maxSize to restrict cell to some size, it defaults to CollectionView width and unlimited height. To set data use data property.

let view = ClipCollectionView<DynamicCell>(collectionViewLayout: UICollectionViewFlowLayout())
view.data = [SomeData]()

🎏 Objc and Swift APIs

In swift you can use both.

objc:

[view configureWithBlock:^(ClipLayout *clip) {
        clip.wantsSize = CGSizeMake(100, 100);
        clip.alignment.vertical = ClipAlignmentHead;
        clip.distribution = ClipDistributionRow;
    }];

swift:

view.clip.enabled().withWidth(100).withHeight(100).verticallyAligned(.head).withDistribution(.row)

πŸ”² CALayer support

Author

Denis Litvin, den.litvinn@gmail.com

License

ClipLayout is available under the MIT license. See the LICENSE file for more info.