OAStackView
  • August 5, 2023
UIStackView

iOS 9 introduced the very cool UIStackView, UIStackView can be used to easily create simple and complex layouts.

As expected UIStackView can only be used for iOS 9 and up. This project tries to port back the stackview to iOS 7+.

OAStackView aims at replicating all the features in UIStackView

Usage


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

Since OAStackView mimics the interface of UIStackView, the usage of OAStackView is similar to UIStackView.

OAStackView Can be either used from the Interface builder, or from code.

Interface Builder

Drag a a UIView into your view controller, and add some views to it.

UIView

Change the class to OAStackView

OAStackView

 

(Optional) Change the stack Axis (set Axis Value to 0 for Horizontal or 1 for Vertical), Spacing, Alignment or distribution.

 

 

Run the project!

 

 

From Code

To use OAStackView from code, Please refer to UIStackView for proper documentation.

As a quick example on its usage do the following:

Create a couple of views to be stacked:

UILabel *l1 = [[UILabel alloc] init];
l1.text = @”Label 1″;
UILabel *l2 = [[UILabel alloc] init];
l2.text = @”Label 2″;

Create the stack view passing the array of views:

OAStackView *stackView = [[OAStackView alloc] initWithArrangedSubviews:@[l1, l2]];
stackView.translatesAutoresizingMaskIntoConstraints = NO;

Add the stack view to self.view

[self.view addSubview:stackView];

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@”V:|-30-[stackView]”
options:0
metrics:0
views:NSDictionaryOfVariableBindings(stackView)]];

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@”H:|-10-[stackView]”
options:0
metrics:0
views:NSDictionaryOfVariableBindings(stackView)]];

Installation


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

pod “OAStackView”

Tests


Since OAStackView has been built from reverse engineering UIStackView, and since I intend to keep updating and refactoring OAStackView, tests was one of the requirements going forward.

The following a human readable text subscript (generated with specipy).

Contribution


All contributions in any form are welcomed, if you find the project helpful, and you want to contribute then please do.

Known Issues, and future improvements

Missing functionality

OAStackView implements most of the features from UIStackView except the following:

  •  baselineRelativeArrangement

    @property(nonatomic,getter=isBaselineRelativeArrangement) BOOL baselineRelativeArrangement;

  •  layoutMarginsRelativeArrangement

    @property(nonatomic,getter=isLayoutMarginsRelativeArrangement) BOOL layoutMarginsRelativeArrangement;

UIStackViewDistribution is also partially implemented (2 elements out of 5 are still not implemented)

  •  UIStackViewDistributionFill
  •  UIStackViewDistributionFillEqually
  •  UIStackViewDistributionFillProportionally
  •  UIStackViewDistributionEqualSpacing
  •  UIStackViewDistributionEqualCentering

Please refer to UIStackView for proper documentation.

Future improvements

The following would be nice to have for future versions

  •  Covering the remaining functionality from UIStackView
  •  Better Documentation
  •  Better test coverage for some edge cases
  •  Rewrite in swift, or more swift friendly

GitHub


View Github

YOU MIGHT ALSO LIKE...
PermissionsSwiftUI: A SwiftUI package to handle permissions

PermissionsSwiftUI displays and handles permissions in SwiftUI. It is largely inspired by SPPermissions. The UI is highly customizable and resembles an Apple style. ...

Pager tab strip view

Introduction PagerTabStripView is the first pager view built in pure SwiftUI. It provides a component to create interactive pager views ...

PageView

SwiftUI view enabling page-based navigation, imitating the behaviour of UIPageViewController in iOS.

Pages

    

How to take action when a property changes

1. Taking Action When a Property Changes: Property Observers Swift lets you observe and respond to changes in a property’s ...