Panel Views
PanelsThe full panel family beyond the base shadow variant. These views provide ready-made card containers with stacks, titles, scroll areas, and button integrations. All combine TTBaseUIStackView and TTBaseScrollPanelView to create common layout patterns.
| Class | Description |
|---|---|
TTBaseStackPanelView | View + embedded vertical stack (add content to stack) |
TTBaseStackShadowPanelView | Shadow card + embedded vertical stack |
TTBaseTitlePanelView | Card with title label at the top |
TTBaseScrollPanelView | Scrollable vertical panel with keyboard dismiss |
TTBasePanelButtonView | View + action button combined |
TTBasePanelViewUIStackView | Panel backed by UIStackView layout |
🚀 Usage
// Stack panel — add arranged subviews to panelStackView
let panel = TTBaseStackPanelView()
panel.panelStackView.addArrangedSubview(nameLabel)
panel.panelStackView.addArrangedSubview(emailLabel)
panel.panelStackView.addArrangedSubview(submitButton)
// Shadow stack panel (card style)
let card = TTBaseStackShadowPanelView()
card.panelStackView.addArrangedSubview(iconView)
card.panelStackView.addArrangedSubview(titleLabel)
// Title panel
let titled = TTBaseTitlePanelView(titleText: "Personal Info")
titled.contentView.addSubview(nameTextField)
// Scroll panel (for long forms)
let scrollPanel = TTBaseScrollPanelView()
scrollPanel.stackView.addArrangedSubview(field1)
scrollPanel.stackView.addArrangedSubview(field2)
scrollPanel.stackView.addArrangedSubview(field3)
// ... keyboard auto-dismisses on drag
// Panel with button
let panelWithButton = TTBasePanelButtonView(buttonTitle: "Continue")
panelWithButton.onButtonTouchHandler = { [weak self] in
self?.navigateToNext()
}
📜 TTBaseScrollPanelView in Detail
// Use as form container
class MyFormViewController: TTBaseScrollViewController {
// Override paddingScroll for form padding:
override var paddingScroll: (CGFloat, CGFloat, CGFloat, CGFloat) {
return (0, TTSize.H_NAV, 0, TTSize.H_TABBAR)
}
override func viewDidLoad() {
super.viewDidLoad()
// Add form views to baseScrollView.stackView
baseScrollView.stackView?.addArrangedSubview(nameFieldView)
baseScrollView.stackView?.addArrangedSubview(emailFieldView)
}
}
Pro Tip: For forms, always use
TTBaseScrollViewController (wraps TTBaseScrollPanelView) instead of manually embedded scroll views. It handles keyboard dismiss mode, safe area insets, and width constraints automatically.