Skip to content

πŸ“‹ iOS Form UI Builder in Swift (powered by UICollectionView)

License

Notifications You must be signed in to change notification settings

FluidGroup/StackScrollView

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Jan 26, 2022
c7d2950 Β· Jan 26, 2022

History

91 Commits
Mar 3, 2020
Nov 13, 2017
May 2, 2017
Aug 27, 2019
Nov 27, 2021
Sep 14, 2018
Nov 28, 2021
Aug 28, 2016
Aug 28, 2016
Nov 27, 2021
May 2, 2017
Nov 27, 2021
May 19, 2019
Jan 26, 2022

Repository files navigation

StackScrollView

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.

Usage

Basic usage

let stack = StackScrollView()

stack.append(view: ...)

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

APIs

StackScrollView

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

StackCellType

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)
    
    addSubview(label)
    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

ManualLayout

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)

Author

muukii, muukii.app@gmail.com

License

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