- August 28, 2025
- Mins Read
A Swift based implementation of the Android Snackbar for iOS

TTGSnackbar is useful for showing a brief message at bottom or top of the screen with one or two action buttons. It appears above all other elements on screen.
It disappears after a timeout or after user click the action button.
Version 1.9.0+ Xcode 9+ iOS 8+
Version 1.6.0 Xcode 9
iOS 8+
Version 1.5.3 Xcode 8
iOS 8+
You can use CocoaPods to install TTGSnackbar by adding it to your Podfile:
pod “TTGSnackbar”
You can use Carthage to install TTGSnackbar by adding it to your Cartfile:
github “zekunyan/TTGSnackbar”
And you need to import the module.
import TTGSnackbar

let snackbar = TTGSnackbar(message: “TTGSnackbar !”, duration: .short)
snackbar.show()

let snackbar = TTGSnackbar(
message: “TTGSnackBar !”,
duration: .middle,
actionText: “Action!”,
actionBlock: { (snackbar) in
print(“Click action!”)
}
)
snackbar.show()

let snackbar = TTGSnackbar(
message: “TTGSnackbar !”,
duration: .forever,
actionText: “Action”,
actionBlock: { (snackbar) in
print(“Click action!”)
// Dismiss manually after 3 seconds
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + Double(Int64(3 * Double(NSEC_PER_SEC))) / Doubl(NSEC_PER_SEC)) {
snackbar.dismiss()
}
}
)
snackbar.show()

let snackbar = TTGSnackbar(message: “Two actions !”, duration: .long)
// Action 1
snackbar.actionText = “Yes”
snackbar.actionTextColor = UIColor.green
snackbar.actionBlock = { (snackbar) in NSLog(“Click Yes !”) }
// Action 2
snackbar.secondActionText = “No”
snackbar.secondActionTextColor = UIColor.yellow
snackbar.secondActionBlock = { (snackbar) in NSLog(“Click No !”) }
snackbar.show()

let snackbar = TTGSnackbar(message: “TTGSnackbar !”, duration: .long)
// Add icon image
snackbar.icon = UIImage(named: “emoji_cool_small”)
snackbar.show()

// Instantiate the custom content view
let customContentView = UINib(nibName: “CustomView”, bundle:Bundle.main).instantiate(withOwner: nil, options: nil).first as! UIView?
// Initialize the snackbar with the custom content view
let snackbar = TTGSnackbar(customContentView: customContentView, duration: .long)
snackbar.show()

let snackbar = TTGSnackbar(message: “TTGSnackbar !”, duration: .long)
// Add icon image
snackbar.icon = UIImage(named: “emoji_cool_small”)
// Add the gesture recognizer callbacks
ssnackbar.onTapBlock = { snackbar in
snackbar.dismiss()
}
snackbar.onSwipeBlock = { (snackbar, direction) in
// Change the animation type to simulate being dismissed in that direction
if direction == .right {
snackbar.animationType = .slideFromLeftToRight
} else if direction == .left {
snackbar.animationType = .slideFromRightToLeft
} else if direction == .up {
snackbar.animationType = .slideFromTopBackToTop
} else if direction == .down {
snackbar.animationType = .slideFromTopBackToTop
}
snackbar.dismiss()
}
snackbar.show()
TTGSnackbarManager can handle automatically showing and replacing the presented Snackbars at your screen.
let snackbar = TTGSnackbar(message: “TTGSnackbar !”, duration: .long)
TTGSnackbarManager.show(snackbar)
TTGSnackbar *bar = [[TTGSnackbar alloc] initWithMessage:@”Bar1″ duration:TTGSnackbarDurationMiddle];
[bar setDismissBlock:^(TTGSnackbar * snackBar) {
//whatever you want for dismiss
}];
[[TTGSnackbarManager shared] showSnackbar: bar];
TTGSnackbarManager uses the dismissBlock property of a snackbar, it does not replace any functionality that you add to the snackbar, rather it just adds its own code to the existing block.
message: String defines the message to display. Supports multi line text. Supports updating on the fly.
messageTextColor: UIColor defines the message text color.
messageTextFont: UIFont defines the message text font.
duration: TTGSnackbarDurationdefines the display duration.
TTGSnackbarDuration : short, middle, long and forever. When you set forever, the snackbar will show an activity indicator after user click the action button and you must dismiss the snackbar manually.
actionText: String defines the action button title.
actionTextColor: UIColor defines the action button title color.
actionTextFont: UIFont defines the action button title font.
actionMaxWidth: CGFloat defines the action button max width. Min is 44.
actionTextNumberOfLines: Int defines the number of lines of action button title. Default is 1.
actionBlock: TTGActionBlock? will be called when user clicks the action button.
// TTGActionBlock definition.
public typealias TTGActionBlock = (snackbar: TTGSnackbar) -> Void
secondActionText: String
secondActionTextColor: UIColor
secondActionTextFont: UIFont
secondActionBlock: TTGActionBlock?
snackbarMaxWidth: CGFloat will set the max width of the snackbar if on larger devices you don not want it full width. Default is -1 which is denotes full-width.
dismissBlock: TTGDismissBlock? will be called when snackbar dismiss automatically or when user click action button to dismiss the snackbar.
// TTGDismissBlock definition.
public typealias TTGDismissBlock = (snackbar: TTGSnackbar) -> Void
onTapBlock: TTGActionBlock will be called when the user taps the snackbar.
// TTGActionBlock definition.
public typealias TTGActionBlock = (snackbar: TTGSnackbar) -> Void
onSwipeBlock: TTGSwipeBlock will be called when the user swipes on the snackbar
/// Swipe gesture callback closure
public typealias TTGSwipeBlock = (_ snackbar: TTGSnackbar, _ direction: UISwipeGestureRecognizerDirection) -> Void
shouldDismissOnSwipe: Bool will determine if the snackbar will automatically be dismissed when it’s swiped
/// A property to make the snackbar auto dismiss on Swipe Gesture
public var shouldDismissOnSwipe: Bool = false
animationType: TTGSnackbarAnimationType defines the style of snackbar when it show and dismiss.
TTGSnackbarAnimationType : fadeInFadeOut, slideFromBottomToTop, slideFromBottomBackToBottom, slideFromLeftToRight, slideFromRightToLeft, slideFromTopToBottom and slideFromTopBackToTop.
The default value of animationType is slideFromBottomBackToBottom, which is the same as Snackbar in Android.
animationDuration: NSTimeInterval defines the duration of show and hide animation.
leftMargin: CGFloat, rightMargin: CGFloat, topMargin: CGFloat and bottomMargin: CGFloat defines the margins of snackbar
shouldActivateLeftAndRightMarginOnCustomContentView: Bool will activate the left and right margins if using a customContentView
/// a property to enable left and right margin when using customContentView
public var shouldActivateLeftAndRightMarginOnCustomContentView: Bool = false
contentInset: UIEdgeInsets defines the padding(content inset) of content in the snackbar. Default is UIEdgeInsets.init(top: 0, left: 4, bottom: 0, right: 4).
cornerRadius: CGFloat defines the corner radius of snackbar.
icon: UIImage defines the icon image.
iconContentMode: UIViewContentMode defines the content mode of icon imageView.
containerView: UIView defines the custom container(super) view for snackbar to show.
customContentView: UIView? defines the custom content view to show in the snackbar.
separateViewBackgroundColor: UIColor = UIColor.gray defines the separator line color.
activityIndicatorViewStyle: UIActivityIndicatorViewStyle defines the activityIndicatorViewStyle in snackbar.
activityIndicatorViewColor: UIColor defines the activityIndicatorView color in snackbar.
animationSpringWithDamping: CGFloat defines the spring animation damping value. Default is 0.7.
animationInitialSpringVelocity: CGFloat defines the spring animation initial velocity. Default is 5.
This package provides you with an easy way to show tooltips over any SwiftUI view, since Apple does not provide ...
SimpleToast is a simple, lightweight, flexible and easy to use library to show toasts / popup notifications inside iOS or ...
Create Toast Views with Minimal Effort in SwiftUI Using SSToastMessage. SSToastMessage enables you to effortlessly add toast notifications, alerts, and ...