Swiftpack.co - 3sidedcube/MessageStackView as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by 3sidedcube.
3sidedcube/MessageStackView 3.0.0
Wrapper of a UIStackView for posting and removing messages.
⭐️ 2
🕓 1 year ago
.package(url: "https://github.com/3sidedcube/MessageStackView.git", from: "3.0.0")


This is an example of posting a message from the top of the window:

        title: "This is a window notification",
        subtitle: "This notification has been posted on the key window",
        image: UIImage(named: "donations"),
        fillColor: .red

Alt Text

  1. The BadgeMessage model defines what the message should look like
  2. A BadgeMessageView is created with properties defined by the BadgeMessage
  3. The BadgeMessageView is posted on a PostView on the keyWindow

This PostView adds and removes itself from the keyWindow dynamically based on what is in its queue. See the Example project for more on what this framework can do!



CocoaPods is a dependency manager for Cocoa projects. To integrate MessageStackView into your Xcode project using CocoaPods, specify it in your Podfile:

pod 'MessageStackView', :git => 'https://github.com/3sidedcube/MessageStackView.git', :tag ~> '3.0.0'


Carthage is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. To integrate MessageStackView into your Xcode project using Carthage, specify it in your Cartfile:

github "3sidedcube/MessageStackView" ~> 3.0.0

Swift Package Manager

The Swift Package Manager is a tool for automating the distribution of Swift code and is integrated into the swift compiler. To integrate MessageStackView into your project using Swift Package Manager, specify it in the dependencies of your Package.swift:

dependencies: [
    .package(url: "https://github.com/3sidedcube/MessageStackView.git", .upToNextMajor(from: "3.0.0"))

Core Entities


Encaspsulates the logic of when and how UIViews should be posted and removed.

Internally PostManager handles:

  1. Dismissal Timers which, after a given time, request to remove a previously posted UIView
  2. A PostGestureManager for gesture related dismissals, e.g. pan.
  3. Serial Queue if required


While PostManager handles the logic of when to post and remove a UIView, UIViewPoster handles the actual posting and subviews. Specifically, adding and removing the subview to the subview hierarchy, and animating when required.

PostManager references a UIViewPoster communicating when to post and remove. There are a few common implementations of UIViewPoster provided in this framwork.


A UIView for posting other UIViews in a serial manner. The animation of posted UIViews is via a translation from the top.

Commonly, PostView is constrained to the top, leading, trailing edges of a UIView e.g. UIWindow. When a subview is posted, the PostView constrains its edges to the added subview. So, in this case, a posted UIView would define its height either intrinsically or via explicit constraints, with its width determined by the PostView.


A simple wrapper of a vertical UIStackView for posting and removing UIViews. These UIViews, being a UIStackView, are part of the arrangedSubviews. The animation of posted UIViews is handled via the UIStackView by setting isHidden.



Properties include:

  1. title - required
  2. subtitle - Optional
  3. leftImage - Optional
  4. rightImage - Optional

A Message describes how a MessageView should look, which is the view which is posted on the UIViewPoster.


BadgeMessage is similar to Message with an updated design and interface.


MessageStackView + Custom View

The posted UIViews width will be determined by the UIStackView as the distribution is fill and the UIStackView axis is .vertical.
However the height of the UIView is driven by the UIView itself, e.g. autolayout.

If, when posting and removing this UIView from the MessageStackView you want the animation to be smooth, then consider a "breakable" constraint for the height. Since the UIStackView will animate the isHidden property on the UIView, which will set an explict height during animation.


Stars: 2
Last commit: 3 weeks ago
jonrohan Something's broken? Yell at me @ptrpavlik. Praise and feedback (and money) is also welcome.

Release Notes

2 years ago

See #35

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics