DevelopIdeas
7/10/2013 - 3:17 PM

Stack subviews vertically ordered by their index. Good when u want to use XIB's and need to layout views (show/hide) based on external data,

Stack subviews vertically ordered by their index. Good when u want to use XIB's and need to layout views (show/hide) based on external data, but cannot use autolayout.

#import "UIView+Stacker.h"

@implementation UIView (Stacker)

- (void)stackSubviews {
    
    // Init Y position of the first visible subview contained inside the StackerView
    float _y = 0;
    
    for (UIView *subview in self.subviews) {
        // Start by adjusting the Y position of the current subview
        subview.y = _y;
        
        // If the subview is visible, then add height to the global Y position, which is
        // used to set the Y position of the next subview in the iteration
        if (!subview.hidden) {
            
            // If the subview is a TableView, we use the contentsize instead of the frames height
            if ([subview isMemberOfClass:[UITableView class]]) {
                UITableView *tview = (UITableView *)subview;
                _y += tview.contentSize.height;
            } else {
                _y += subview.frame.size.height;
            }
            
            // Increase the height of acctual StackerView with each visible sub-view
            self.height = _y;
        }
    }
}

@end
#import <UIKit/UIKit.h>

@interface UIView (Stacker)

- (void)stackSubviews;

@end