UIView+FDCollapsibleConstraints
builds to collapse a view and its relevant layout constraints, simulating a "Flow Layout" mode.
This demo collapses the forkingdog
image view and its bottom margin constraint.
This demo collapses diffent components in cell, according to its data entity, each margin handles right as well.
First, tell which constraints will be collapsed when the view collapses. We provide a IBOutletCollection
to make it easier in Interface Builder:
@property (nonatomic, copy) IBOutletCollection(NSLayoutConstraint) NSArray *fd_collapsibleConstraints;
You can assgin it by codes, but it's better to "connect lines" in Interface Builder:
Selected constraints will collapse when:
view.fd_collapsed = YES;
And expand back when:
view.fd_collapsed = NO;
Not every view needs to add a width or height constraint, views like UILabel
, UIImageView
have their Intrinsic content size
when they have content in it. For these views, we provide a Auto collapse
property, when its content is gone, selected constraints will collapse automatically.
You can enable auto collapse by:
label.fd_autoCollapse = YES;
imageView.fd_autoCollapse = YES;
And it will work as you expect:
label.text = nil/*or @""*/; (auto => label.fd_collapsed = YES)
label.text = @"forkingdog"; (auto => label.fd_collapsed = NO)
imageView.image = nil; (auto => imageView.fd_collapsed = YES)
imageView.image = [UIImage imageNamed:@"forkingdog"]; (auto => imageView.fd_collapsed = NO)
We've also offered a Interface Builder friendly way to enable auto collapse
:
@property (nonatomic, assign, getter=fd_autoCollapse) IBInspectable BOOL autoCollapse;
Here's what you may find in Attribute Inspector
It's behavior is same as setting fd_autoCollapse
property in code.
Cocoapods:
pod search UIView+FDCollapsibleConstraints
MIT