|
@@ -1,198 +0,0 @@
|
|
-//
|
|
|
|
-// CustomStackView.swift
|
|
|
|
-// TestUIKit
|
|
|
|
-//
|
|
|
|
-// Created by 100Years on 2025/2/24.
|
|
|
|
-//
|
|
|
|
-
|
|
|
|
-import UIKit
|
|
|
|
-import SnapKit
|
|
|
|
-
|
|
|
|
-class TSCustomStackView: UIView {
|
|
|
|
- // 内部的 UIScrollView 和 UIStackView
|
|
|
|
- private let scrollView: UIScrollView
|
|
|
|
- private let stackView: UIStackView
|
|
|
|
-
|
|
|
|
- // 开放的属性,用于设置方向和间距
|
|
|
|
- var axis: NSLayoutConstraint.Axis {
|
|
|
|
- get {
|
|
|
|
- return stackView.axis
|
|
|
|
- }
|
|
|
|
- set {
|
|
|
|
- stackView.axis = newValue
|
|
|
|
- updateScrollViewConstraints()
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- var spacing: CGFloat {
|
|
|
|
- get {
|
|
|
|
- return stackView.spacing
|
|
|
|
- }
|
|
|
|
- set {
|
|
|
|
- stackView.spacing = newValue
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- var viewH:CGFloat {
|
|
|
|
- get {
|
|
|
|
- return scrollView.contentSize.height
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // 初始化方法
|
|
|
|
- init(axis: NSLayoutConstraint.Axis = .vertical, spacing: CGFloat = 0) {
|
|
|
|
- self.scrollView = UIScrollView()
|
|
|
|
- self.stackView = UIStackView()
|
|
|
|
- self.stackView.axis = axis
|
|
|
|
- self.stackView.spacing = spacing
|
|
|
|
- self.stackView.alignment = .fill
|
|
|
|
- self.stackView.distribution = .fill
|
|
|
|
- super.init(frame: .zero)
|
|
|
|
- setupUI()
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- required init?(coder: NSCoder) {
|
|
|
|
- fatalError("init(coder:) has not been implemented")
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // 设置 UI
|
|
|
|
- private func setupUI() {
|
|
|
|
- // 添加 scrollView
|
|
|
|
- addSubview(scrollView)
|
|
|
|
- scrollView.snp.makeConstraints { make in
|
|
|
|
- make.edges.equalToSuperview()
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // 添加 stackView 到 scrollView
|
|
|
|
- scrollView.addSubview(stackView)
|
|
|
|
- updateScrollViewConstraints()
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // 根据轴方向更新约束
|
|
|
|
- private func updateScrollViewConstraints() {
|
|
|
|
- stackView.snp.remakeConstraints { make in
|
|
|
|
- make.edges.equalToSuperview()
|
|
|
|
-
|
|
|
|
- // 根据轴方向设置 contentSize
|
|
|
|
- if axis == .vertical {
|
|
|
|
- make.width.equalTo(scrollView)
|
|
|
|
- } else {
|
|
|
|
- make.height.equalTo(scrollView)
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // 动态添加子视图的方法
|
|
|
|
- func addSubviewToStack(_ view: UIView) {
|
|
|
|
- stackView.addArrangedSubview(view)
|
|
|
|
- // 可以根据需要对子视图进行额外的布局设置
|
|
|
|
- view.snp.makeConstraints { make in
|
|
|
|
- if axis == .vertical {
|
|
|
|
- make.width.equalTo(stackView)
|
|
|
|
- } else {
|
|
|
|
- make.height.equalTo(stackView)
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // 在指定位置插入子视图
|
|
|
|
- func insertViewToStack(_ view: UIView, at stackIndex: Int) {
|
|
|
|
- stackView.insertArrangedSubview(view, at: stackIndex)
|
|
|
|
- // 可以根据需要对子视图进行额外的布局设置
|
|
|
|
- view.snp.makeConstraints { make in
|
|
|
|
- if axis == .vertical {
|
|
|
|
- make.width.equalTo(stackView)
|
|
|
|
- } else {
|
|
|
|
- make.height.equalTo(stackView)
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // 移除子视图
|
|
|
|
- func removeViewToStack(_ view: UIView) {
|
|
|
|
- stackView.removeArrangedSubview(view)
|
|
|
|
- view.removeFromSuperview()
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-//class TSCustomStackView: UIView {
|
|
|
|
-// // 内部的 UIStackView
|
|
|
|
-// private let stackView: UIStackView
|
|
|
|
-//
|
|
|
|
-// // 开放的属性,用于设置方向和间距
|
|
|
|
-// var axis: NSLayoutConstraint.Axis {
|
|
|
|
-// get {
|
|
|
|
-// return stackView.axis
|
|
|
|
-// }
|
|
|
|
-// set {
|
|
|
|
-// stackView.axis = newValue
|
|
|
|
-// }
|
|
|
|
-// }
|
|
|
|
-//
|
|
|
|
-// var spacing: CGFloat {
|
|
|
|
-// get {
|
|
|
|
-// return stackView.spacing
|
|
|
|
-// }
|
|
|
|
-// set {
|
|
|
|
-// stackView.spacing = newValue
|
|
|
|
-// }
|
|
|
|
-// }
|
|
|
|
-//
|
|
|
|
-// // 初始化方法
|
|
|
|
-// init(axis: NSLayoutConstraint.Axis = .vertical, spacing: CGFloat = 0) {
|
|
|
|
-// self.stackView = UIStackView()
|
|
|
|
-// self.stackView.axis = axis
|
|
|
|
-// self.stackView.spacing = spacing
|
|
|
|
-// self.stackView.alignment = .fill
|
|
|
|
-// self.stackView.distribution = .fill
|
|
|
|
-// super.init(frame: .zero)
|
|
|
|
-// setupUI()
|
|
|
|
-// }
|
|
|
|
-//
|
|
|
|
-// required init?(coder: NSCoder) {
|
|
|
|
-// fatalError("init(coder:) has not been implemented")
|
|
|
|
-// }
|
|
|
|
-//
|
|
|
|
-// // 设置 UI
|
|
|
|
-// private func setupUI() {
|
|
|
|
-// addSubview(stackView)
|
|
|
|
-// stackView.snp.makeConstraints { make in
|
|
|
|
-// make.edges.equalToSuperview()
|
|
|
|
-// }
|
|
|
|
-// }
|
|
|
|
-//
|
|
|
|
-// // 动态添加子视图的方法
|
|
|
|
-// func addSubviewToStack(_ view: UIView) {
|
|
|
|
-// stackView.addArrangedSubview(view)
|
|
|
|
-// // 可以根据需要对子视图进行额外的布局设置
|
|
|
|
-// view.snp.makeConstraints { make in
|
|
|
|
-// if axis == .vertical {
|
|
|
|
-// make.width.equalTo(stackView)
|
|
|
|
-// } else {
|
|
|
|
-// make.height.equalTo(stackView)
|
|
|
|
-// }
|
|
|
|
-// }
|
|
|
|
-// }
|
|
|
|
-//
|
|
|
|
-//
|
|
|
|
-// // 动态添加子视图的方法
|
|
|
|
-// func insertViewToStack(_ view: UIView, at stackIndex: Int){
|
|
|
|
-// stackView.insertArrangedSubview(view, at: 0)
|
|
|
|
-// // 可以根据需要对子视图进行额外的布局设置
|
|
|
|
-// view.snp.makeConstraints { make in
|
|
|
|
-// if axis == .vertical {
|
|
|
|
-// make.width.equalTo(stackView)
|
|
|
|
-// } else {
|
|
|
|
-// make.height.equalTo(stackView)
|
|
|
|
-// }
|
|
|
|
-// }
|
|
|
|
-// }
|
|
|
|
-//
|
|
|
|
-// func removeViewToStack(_ view: UIView){
|
|
|
|
-// stackView.removeArrangedSubview(view)
|
|
|
|
-// view.removeFromSuperview()
|
|
|
|
-// }
|
|
|
|
-//
|
|
|
|
-//
|
|
|
|
-//}
|
|
|