📋 iOS Form UI Builder in Swift (powered by UICollectionView)
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
PinFlexLayoutDemo Introduce ManualLayoutStackCellType Nov 13, 2017
Resources Update Readme May 2, 2017
StackScrollView-Demo Swift4.2 Sep 14, 2018
StackScrollView.xcodeproj Swift4.2 Sep 14, 2018
StackScrollView.xcworkspace Swift4.2 Sep 14, 2018
StackScrollView Swift4.2 Sep 14, 2018
.gitignore First commit🍻 Aug 28, 2016
.swift-version Update Podspec Sep 14, 2018
.travis.yml Initial commit Aug 28, 2016
LICENSE Initial commit Aug 28, 2016
Podfile Cleanup May 2, 2017
Podfile.lock Cleanup May 2, 2017
README.md Update README.md Sep 15, 2018
StackScrollView.podspec update spec Nov 8, 2018



CI Status Version License Platform Carthage compatible

⚠️ This sample is using demo-components. StackScrollView does not have default-components. StackScrollView is like UIStackView. So, we need to create the components we need.

What is this?

StackScrollView builds form UI easily.

StackScrollView includes UICollectionView. UICollectionView calculates size of view by AutoLayout, then that display. (Use systemLayoutSizeFitting)

  • We call StackCell instead of Cell on StackScrollView.
  • We no longer need to consider reusing Cells.
  • StackCell requires constraint based layout.


Basic usage

let stack = StackScrollView()

stack.append(view: ...)

stack.remove(view: ..., animated: true)



func append(view: UIView)
func remove(view: UIView, animated: Bool)
func scroll(to view: UIView, at position: UICollectionViewScrollPosition, animated: Bool)


StackScrollView does not required StackCellType. if StackCell has StackCellType, be easy that control StackCell.

func scrollToSelf(animated: Bool)
func scrollToSelf(at position: UICollectionViewScrollPosition, animated: Bool)
func updateLayout(animated: Bool)
func remove()

Demo has included this APIs usage.

Create CustomCell from Code

We have to set constraints completely.

final class LabelStackCell: UIView {
  private let label = UILabel()
  init(title: String) {
    super.init(frame: .zero)
    label.translatesAutoresizingMaskIntoConstraints = false
    label.topAnchor.constraint(greaterThanOrEqualTo: topAnchor, constant: 8).isActive = true
    label.bottomAnchor.constraint(lessThanOrEqualTo: bottomAnchor, constant: 8).isActive = true
    label.rightAnchor.constraint(equalTo: rightAnchor, constant: 8).isActive = true
    label.leftAnchor.constraint(equalTo: leftAnchor, constant: 8).isActive = true
    label.centerYAnchor.constraint(equalTo: centerYAnchor).isActive = true
    heightAnchor.constraint(greaterThanOrEqualToConstant: 40).isActive = true
    label.font = UIFont.preferredFont(forTextStyle: .body)
    label.text = title
let stack = StackScrollView()
stack.append(view: LabelStackCell(title: "Label"))

Create CustomCell from XIB

We can use UIView from XIB.

This framework has NibLoader<T: UIView>. It might be useful for you.

Create everything

You can create any Cell. Please, check StackScrollView-Demo


You can create Cell with ManualLayout.

If you use ManualLayout, the Cell have to use ManualLayoutStackCellType. Then, return self-size based on maximum size in size(maxWidth:maxHeight)


muukii, m@muukii.me


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