- Fix autolayout management

This commit is contained in:
Giuseppe Nucifora 2015-07-22 17:24:42 +02:00
parent 7a34b09ccf
commit f217268512
4 changed files with 103 additions and 86 deletions

View File

@ -14,6 +14,7 @@
@property (nonatomic, strong) UIButton *itemButton; @property (nonatomic, strong) UIButton *itemButton;
@property (nonatomic) UIDeviceOrientation orientation; @property (nonatomic) UIDeviceOrientation orientation;
@property (nonatomic, assign) BOOL didSetupConstraints;
@end @end
@ -45,10 +46,12 @@
- (void) layoutSubviews { - (void) layoutSubviews {
//[_itemButton autoPinEdgesToSuperviewMargins]; //[_itemButton autoPinEdgesToSuperviewMargins];
if (!_didSetupConstraints) {
[_itemButton autoCenterInSuperview]; [_itemButton autoCenterInSuperview];
[_itemButton autoMatchDimension:ALDimensionHeight toDimension:ALDimensionHeight ofView:self]; [_itemButton autoMatchDimension:ALDimensionHeight toDimension:ALDimensionHeight ofView:self];
[_itemButton autoMatchDimension:ALDimensionWidth toDimension:ALDimensionWidth ofView:self]; [_itemButton autoMatchDimension:ALDimensionWidth toDimension:ALDimensionWidth ofView:self];
_didSetupConstraints = YES;
}
} }
- (void)deviceOrientationDidChange:(NSNotification *)notification { - (void)deviceOrientationDidChange:(NSNotification *)notification {

View File

@ -19,6 +19,7 @@
@property (nonatomic) NSUInteger subItemRows; @property (nonatomic) NSUInteger subItemRows;
@property (nonatomic, strong) TabBarPickerSubItemsView *subItemSelector; @property (nonatomic, strong) TabBarPickerSubItemsView *subItemSelector;
@property (nonatomic) BOOL show; @property (nonatomic) BOOL show;
@property (nonatomic, assign) BOOL didSetupConstraints;
@end @end
@ -89,63 +90,61 @@
- (void) layoutSubviews { - (void) layoutSubviews {
if ([self.constraints count] > 0) { /*if ([self.constraints count] > 0) {
[NSLayoutConstraint deactivateConstraints:self.constraints]; [NSLayoutConstraint deactivateConstraints:self.constraints];
[NSLayoutConstraint deactivateConstraints:_subItemSelector.constraints]; [NSLayoutConstraint deactivateConstraints:_subItemSelector.constraints];
for (TabBarItem *item in _tabBarItems) { for (TabBarItem *item in _tabBarItems) {
[item.constraints autoRemoveConstraints]; [item.constraints autoRemoveConstraints];
} }
} }*/
if (!_didSetupConstraints) {
switch (_position) { switch (_position) {
case TabBarPickerPositionLeft:{ case TabBarPickerPositionLeft:{
[self autoPinEdgeToSuperviewEdge:ALEdgeTop withInset:20]; [self autoPinEdgeToSuperviewEdge:ALEdgeTop withInset:20];
[self autoPinEdgeToSuperviewEdge:ALEdgeLeft withInset:0]; [self autoPinEdgeToSuperviewEdge:ALEdgeLeft withInset:0];
[self autoSetDimension:ALDimensionWidth toSize:44]; [self autoSetDimension:ALDimensionWidth toSize:44];
[self autoMatchDimension:ALDimensionHeight toDimension:ALDimensionHeight ofView:self.superview withOffset:0 relation:_layoutRelation]; [self autoMatchDimension:ALDimensionHeight toDimension:ALDimensionHeight ofView:self.superview withOffset:0 relation:_layoutRelation];
[self autoAlignAxisToSuperviewMarginAxis:ALAxisHorizontal]; [self autoAlignAxisToSuperviewMarginAxis:ALAxisHorizontal];
[_tabBarItems autoSetViewsDimension:ALDimensionWidth toSize:44.0]; [_tabBarItems autoSetViewsDimension:ALDimensionWidth toSize:44.0];
[_tabBarItems autoDistributeViewsAlongAxis:ALAxisVertical alignedTo:ALAttributeVertical withFixedSpacing:_itemSpacing insetSpacing:YES matchedSizes:YES]; [_tabBarItems autoDistributeViewsAlongAxis:ALAxisVertical alignedTo:ALAttributeVertical withFixedSpacing:_itemSpacing insetSpacing:YES matchedSizes:YES];
[[_tabBarItems firstObject] autoAlignAxisToSuperviewAxis:ALAxisVertical];
}
break;
case TabBarPickerPositionRight:{
[self autoPinEdgeToSuperviewEdge:ALEdgeTop withInset:20];
[self autoPinEdgeToSuperviewEdge:ALEdgeRight withInset:0];
[self autoSetDimension:ALDimensionWidth toSize:44];
[self autoMatchDimension:ALDimensionHeight toDimension:ALDimensionHeight ofView:self.superview withOffset:0 relation:_layoutRelation];
[self autoAlignAxisToSuperviewMarginAxis:ALAxisHorizontal];
[_tabBarItems autoSetViewsDimension:ALDimensionWidth toSize:44.0];
[_tabBarItems autoDistributeViewsAlongAxis:ALAxisVertical alignedTo:ALAttributeVertical withFixedSpacing:_itemSpacing insetSpacing:YES matchedSizes:YES];
[[_tabBarItems firstObject] autoAlignAxisToSuperviewAxis:ALAxisVertical];
}
break;
case TabBarPickerPositionTop:{
[self autoPinEdgeToSuperviewMargin:ALEdgeTop];
[self autoSetDimension:ALDimensionHeight toSize:44];
[self autoMatchDimension:ALDimensionWidth toDimension:ALDimensionWidth ofView:self.superview withOffset:0 relation:_layoutRelation];
[self autoAlignAxisToSuperviewMarginAxis:ALAxisVertical];
[_tabBarItems autoSetViewsDimension:ALDimensionHeight toSize:44.0];
[_tabBarItems autoDistributeViewsAlongAxis:ALAxisHorizontal alignedTo:ALAttributeHorizontal withFixedSpacing:_itemSpacing insetSpacing:YES matchedSizes:YES];
[[_tabBarItems firstObject] autoAlignAxisToSuperviewAxis:ALAxisHorizontal];
}
break;
case TabBarPickerPositionBottom:
default:{
if (!_show) {
[[_tabBarItems firstObject] autoAlignAxisToSuperviewAxis:ALAxisVertical];
} }
else { break;
case TabBarPickerPositionRight:{
[self autoPinEdgeToSuperviewEdge:ALEdgeTop withInset:20];
[self autoPinEdgeToSuperviewEdge:ALEdgeRight withInset:0];
[self autoSetDimension:ALDimensionWidth toSize:44];
[self autoMatchDimension:ALDimensionHeight toDimension:ALDimensionHeight ofView:self.superview withOffset:0 relation:_layoutRelation];
[self autoAlignAxisToSuperviewMarginAxis:ALAxisHorizontal];
[_tabBarItems autoSetViewsDimension:ALDimensionWidth toSize:44.0];
[_tabBarItems autoDistributeViewsAlongAxis:ALAxisVertical alignedTo:ALAttributeVertical withFixedSpacing:_itemSpacing insetSpacing:YES matchedSizes:YES];
[[_tabBarItems firstObject] autoAlignAxisToSuperviewAxis:ALAxisVertical];
}
break;
case TabBarPickerPositionTop:{
[self autoPinEdgeToSuperviewMargin:ALEdgeTop];
[self autoSetDimension:ALDimensionHeight toSize:44];
[self autoMatchDimension:ALDimensionWidth toDimension:ALDimensionWidth ofView:self.superview withOffset:0 relation:_layoutRelation];
[self autoAlignAxisToSuperviewMarginAxis:ALAxisVertical];
[_tabBarItems autoSetViewsDimension:ALDimensionHeight toSize:44.0];
[_tabBarItems autoDistributeViewsAlongAxis:ALAxisHorizontal alignedTo:ALAttributeHorizontal withFixedSpacing:_itemSpacing insetSpacing:YES matchedSizes:YES];
[[_tabBarItems firstObject] autoAlignAxisToSuperviewAxis:ALAxisHorizontal];
}
break;
case TabBarPickerPositionBottom:
default:{
[self autoPinEdgeToSuperviewMargin:ALEdgeBottom]; [self autoPinEdgeToSuperviewMargin:ALEdgeBottom];
[self autoSetDimension:ALDimensionHeight toSize:44]; [self autoSetDimension:ALDimensionHeight toSize:44];
[self autoMatchDimension:ALDimensionWidth toDimension:ALDimensionWidth ofView:self.superview withOffset:0 relation:_layoutRelation]; [self autoMatchDimension:ALDimensionWidth toDimension:ALDimensionWidth ofView:self.superview withOffset:0 relation:_layoutRelation];
@ -157,17 +156,16 @@
[_tabBarItems autoDistributeViewsAlongAxis:ALAxisHorizontal alignedTo:ALAttributeHorizontal withFixedSpacing:_itemSpacing insetSpacing:YES matchedSizes:YES]; [_tabBarItems autoDistributeViewsAlongAxis:ALAxisHorizontal alignedTo:ALAttributeHorizontal withFixedSpacing:_itemSpacing insetSpacing:YES matchedSizes:YES];
} }
break;
} }
break;
[_subItemSelector layoutSubviews];
_didSetupConstraints = YES;
[self updateConstraintsIfNeeded];
} }
[self updateConstraintsIfNeeded];
[_subItemSelector layoutSubviews];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self show];
});
} }
- (void) setPosition:(TabBarPickerPosition)position { - (void) setPosition:(TabBarPickerPosition)position {

View File

@ -9,11 +9,15 @@
#import "TabBarPickerSubItemsView.h" #import "TabBarPickerSubItemsView.h"
#import <PureLayout/PureLayout.h> #import <PureLayout/PureLayout.h>
#define DEFAULT_ITEM_HEIGHT 44
@interface TabBarPickerSubItemsView() @interface TabBarPickerSubItemsView()
@property (nonatomic) NSUInteger itemsPerRow; @property (nonatomic) NSUInteger itemsPerRow;
@property (nonatomic) CGFloat itemHeight;
@property (nonatomic) NSUInteger rows; @property (nonatomic) NSUInteger rows;
@property (nonatomic, strong) UICollectionView *subItemCollectionView; @property (nonatomic, strong) UICollectionView *subItemCollectionView;
@property (nonatomic, assign) BOOL didSetupConstraints;
@end @end
@ -25,7 +29,7 @@
if (self) { if (self) {
_itemsPerRow = itemsPerRow; _itemsPerRow = itemsPerRow;
_itemsArray = [[NSMutableArray alloc] initWithArray:items]; _itemsArray = [[NSMutableArray alloc] initWithArray:items];
_itemHeight = DEFAULT_ITEM_HEIGHT;
_rows = 0; _rows = 0;
for (TabBarItem *item in _itemsArray) { for (TabBarItem *item in _itemsArray) {
@ -33,13 +37,14 @@
_rows = ceil(([[item subItems] count]/_itemsPerRow)); _rows = ceil(([[item subItems] count]/_itemsPerRow));
} }
} }
[self setBackgroundColor:[UIColor whiteColor]];
/*_subItemCollectionView = [[UICollectionView alloc] initForAutoLayout];
[_subItemCollectionView setPagingEnabled:YES];
[_subItemCollectionView setDelegate:self];
[_subItemCollectionView setDataSource:self];
[self addSubview:_subItemCollectionView];*/ [self setBackgroundColor:[UIColor redColor]];
/*_subItemCollectionView = [[UICollectionView alloc] initForAutoLayout];
[_subItemCollectionView setPagingEnabled:YES];
[_subItemCollectionView setDelegate:self];
[_subItemCollectionView setDataSource:self];
[self addSubview:_subItemCollectionView];*/
} }
[self updateConstraintsIfNeeded]; [self updateConstraintsIfNeeded];
@ -50,23 +55,27 @@
- (void) layoutSubviews { - (void) layoutSubviews {
if ([self.constraints count] > 0) { /*if ([self.constraints count] > 0) {
[NSLayoutConstraint deactivateConstraints:self.constraints]; [NSLayoutConstraint deactivateConstraints:self.constraints];
for (TabBarItem *item in _itemsArray) { for (TabBarItem *item in _itemsArray) {
for (TabBarSubItem *subItem in item.subItems) { for (TabBarSubItem *subItem in item.subItems) {
[subItem.constraints autoRemoveConstraints]; [subItem.constraints autoRemoveConstraints];
} }
} }
}*/
if (!_didSetupConstraints) {
[self autoPinEdgeToSuperviewEdge:ALEdgeBottom withInset:-(_rows*_itemHeight)];
[self autoMatchDimension:ALDimensionWidth toDimension:ALDimensionWidth ofView:self.superview withOffset:0 relation:NSLayoutRelationEqual];
[self autoSetDimension:ALDimensionHeight toSize:_rows*_itemHeight];
[_subItemCollectionView autoMatchDimension:ALDimensionWidth toDimension:ALDimensionWidth ofView:self];
[_subItemCollectionView autoMatchDimension:ALDimensionHeight toDimension:ALDimensionHeight ofView:self];
[_subItemCollectionView setBackgroundColor:[UIColor redColor]];
_didSetupConstraints = YES;
} }
[self autoConstrainAttribute:ALEdgeTop toAttribute:ALMarginTop ofView:self.superview withOffset:self.superview.frame.size.height];
[self autoMatchDimension:ALDimensionWidth toDimension:ALDimensionWidth ofView:self.superview withOffset:0 relation:NSLayoutRelationEqual];
[self autoSetDimension:ALDimensionHeight toSize:_rows*44];
[_subItemCollectionView autoMatchDimension:ALDimensionWidth toDimension:ALDimensionWidth ofView:self];
[_subItemCollectionView autoMatchDimension:ALDimensionHeight toDimension:ALDimensionHeight ofView:self];
[_subItemCollectionView setBackgroundColor:[UIColor redColor]];
} }
@end @end

View File

@ -12,6 +12,7 @@
@interface TabBarSubItem() @interface TabBarSubItem()
@property (nonatomic) UIDeviceOrientation orientation; @property (nonatomic) UIDeviceOrientation orientation;
@property (nonatomic, assign) BOOL didSetupConstraints;
@end @end
@ -52,10 +53,16 @@
- (void) layoutSubviews { - (void) layoutSubviews {
if ([self.constraints count] > 0) { /*if ([self.constraints count] > 0) {
[NSLayoutConstraint deactivateConstraints:self.constraints]; [NSLayoutConstraint deactivateConstraints:self.constraints];
}*/
if (_didSetupConstraints) {
_didSetupConstraints = YES;
} }
} }