Skip to content

Commit 573be69

Browse files
committed
Merge branch 'release/1.3.2'
2 parents 83fa243 + de649b9 commit 573be69

File tree

8 files changed

+47
-23
lines changed

8 files changed

+47
-23
lines changed

ScrollStackController.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = "ScrollStackController"
3-
s.version = "1.3.1"
3+
s.version = "1.3.2"
44
s.summary = "Create complex scrollable layout using UIViewController and simplify your code"
55
s.homepage = "https://github.com/malcommac/ScrollStackController"
66
s.license = { :type => "MIT", :file => "LICENSE" }

ScrollStackController.xcodeproj/project.pbxproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -544,7 +544,7 @@
544544
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
545545
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
546546
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
547-
MARKETING_VERSION = 1.3.0;
547+
MARKETING_VERSION = 1.3.2;
548548
ONLY_ACTIVE_ARCH = NO;
549549
PRODUCT_BUNDLE_IDENTIFIER = "com.ScrollStackController.ScrollStackController-iOS";
550550
PRODUCT_NAME = ScrollStackController;
@@ -569,7 +569,7 @@
569569
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
570570
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
571571
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
572-
MARKETING_VERSION = 1.3.0;
572+
MARKETING_VERSION = 1.3.2;
573573
PRODUCT_BUNDLE_IDENTIFIER = "com.ScrollStackController.ScrollStackController-iOS";
574574
PRODUCT_NAME = ScrollStackController;
575575
SKIP_INSTALL = YES;

ScrollStackControllerDemo/ViewController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class ViewController: UIViewController, ScrollStackControllerDelegate {
5858
stackView.addRow(view: plainView)
5959
*/
6060

61-
stackView.addRows(controllers: [welcomeVC, notesVC, tagsVC, galleryVC,pricingVC], animated: false)
61+
stackView.addRows(controllers: [welcomeVC, notesVC, tagsVC, galleryVC, pricingVC], animated: false)
6262
}
6363

6464
@IBAction public func addNewRow() {

Sources/ScrollStackController/ScrollStack.swift

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -809,20 +809,21 @@ open class ScrollStack: UIScrollView, UIScrollViewDelegate {
809809
// Animate visibility
810810
let removedController = row.controller
811811
animateCellVisibility(row, animated: animated, hide: true, completion: { [weak self] in
812-
guard let `self` = self else {
813-
return
814-
}
812+
guard let self = self else { return }
815813

816-
// remove row
817-
row.removeFromSuperview()
814+
self.onChangeRow?(row, true)
815+
816+
row.removeFromStackView()
818817

819818
// When removing a cell the cell above is the only cell whose separator visibility
820819
// will be affected, so we need to update its visibility.
821820
self.updateRowSeparatorVisibility(previousRow)
822821

823-
self.onChangeRow?(row, true)
822+
// Remove from the status
823+
self.prevVisibilityState.removeValue(forKey: row)
824824
})
825-
825+
826+
self.stackDelegate?.scrollStackRowDidBecomeHidden(self, row: row, index: row.index!, state: .removed)
826827
return removedController
827828
}
828829

Sources/ScrollStackController/ScrollStackRow.swift

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,12 @@ open class ScrollStackRow: UIView, UIGestureRecognizerDelegate {
104104
/// NOTE:
105105
/// This value is strongly retained so you don't need to
106106
/// save it anywhere in your parent controller in order to avoid releases.
107-
public let controller: UIViewController?
107+
public private(set) var controller: UIViewController?
108108

109109
/// Content view controller (if controller is used) or just the view addded.
110110
///
111111
/// NOTE: This value is strongly retained.
112-
public let contentView: UIView
112+
public private(set) var contentView: UIView?
113113

114114
// MARK: - Manage Separator
115115

@@ -138,7 +138,7 @@ open class ScrollStackRow: UIView, UIGestureRecognizerDelegate {
138138
// MARK: Private Properties
139139

140140
@objc private func handleTap(_ tapGestureRecognizer: UITapGestureRecognizer) {
141-
guard contentView.isUserInteractionEnabled else {
141+
guard contentView?.isUserInteractionEnabled ?? false else {
142142
return
143143
}
144144
onTap?(self)
@@ -196,8 +196,21 @@ open class ScrollStackRow: UIView, UIGestureRecognizerDelegate {
196196
}
197197

198198
// MARK: - Setup UI
199+
200+
public func removeFromStackView() {
201+
contentView?.removeFromSuperview()
202+
contentView = nil
203+
controller = nil
204+
205+
stackView?.stackView.removeArrangedSubview(self)
206+
removeFromSuperview()
207+
}
199208

200209
private func setupPostInit() {
210+
guard let contentView = contentView else {
211+
return
212+
}
213+
201214
clipsToBounds = true
202215
insetsLayoutMarginsFromSafeArea = false
203216
contentView.translatesAutoresizingMaskIntoConstraints = false
@@ -207,6 +220,10 @@ open class ScrollStackRow: UIView, UIGestureRecognizerDelegate {
207220
}
208221

209222
internal func layoutUI() {
223+
guard let contentView = contentView else {
224+
return
225+
}
226+
210227
contentView.removeFromSuperview()
211228
contentView.removeFromSuperview()
212229

@@ -243,6 +260,10 @@ open class ScrollStackRow: UIView, UIGestureRecognizerDelegate {
243260
// MARK: - Manage Separator
244261

245262
private func didUpdateContentViewContraints() {
263+
guard let contentView = contentView else {
264+
return
265+
}
266+
246267
let bottomConstraint = contentView.bottomAnchor.constraint(equalTo: layoutMarginsGuide.bottomAnchor, constant: rowPadding.bottom)
247268
bottomConstraint.priority = UILayoutPriority(rawValue: UILayoutPriority.required.rawValue - 1)
248269

@@ -305,7 +326,7 @@ open class ScrollStackRow: UIView, UIGestureRecognizerDelegate {
305326
}
306327

307328
private func setupRowToFixedValue(_ value: CGFloat) {
308-
guard let stackView = stackView else { return }
329+
guard let stackView = stackView, let contentView = contentView else { return }
309330

310331
if stackView.axis == .vertical {
311332
contentView.width(constant: nil)
@@ -317,8 +338,8 @@ open class ScrollStackRow: UIView, UIGestureRecognizerDelegate {
317338
}
318339

319340
private func setupRowSizeToFitLayout() {
320-
guard let stackView = stackView else { return }
321-
341+
guard let stackView = stackView, let contentView = contentView else { return }
342+
322343
var bestSize: CGSize!
323344
if stackView.axis == .vertical {
324345
let maxAllowedSize = CGSize(width: stackView.bounds.size.width, height: CGFloat.greatestFiniteMagnitude)
@@ -355,7 +376,7 @@ open class ScrollStackRow: UIView, UIGestureRecognizerDelegate {
355376

356377
open override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
357378
super.touchesBegan(touches, with: event)
358-
guard contentView.isUserInteractionEnabled else {
379+
guard contentView?.isUserInteractionEnabled ?? false else {
359380
return
360381
}
361382

@@ -367,7 +388,7 @@ open class ScrollStackRow: UIView, UIGestureRecognizerDelegate {
367388

368389
open override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
369390
super.touchesMoved(touches, with: event)
370-
guard contentView.isUserInteractionEnabled, let touch = touches.first else {
391+
guard contentView?.isUserInteractionEnabled ?? false, let touch = touches.first else {
371392
return
372393
}
373394

@@ -382,7 +403,7 @@ open class ScrollStackRow: UIView, UIGestureRecognizerDelegate {
382403

383404
open override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) {
384405
super.touchesCancelled(touches, with: event)
385-
guard contentView.isUserInteractionEnabled else {
406+
guard contentView?.isUserInteractionEnabled ?? false else {
386407
return
387408
}
388409

@@ -394,7 +415,7 @@ open class ScrollStackRow: UIView, UIGestureRecognizerDelegate {
394415

395416
open override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
396417
super.touchesEnded(touches, with: event)
397-
guard contentView.isUserInteractionEnabled else {
418+
guard contentView?.isUserInteractionEnabled ?? false else {
398419
return
399420
}
400421

Sources/ScrollStackController/ScrollStackViewController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ open class ScrollStackViewController: UIViewController {
5858
view = scrollStack
5959
// monitor remove or add of a row to manage the view controller's hierarchy
6060
scrollStack.onChangeRow = { [weak self] (row, isRemoved) in
61-
guard let `self` = self else {
61+
guard let self = self else {
6262
return
6363
}
6464
self.didAddOrRemoveRow(row, isRemoved: isRemoved)

Sources/ScrollStackController/Support/ScrollStack+Protocols.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,16 +176,18 @@ public extension ScrollStack {
176176
/// - `entire`: row is entirely visible.
177177
/// - `hidden`: row is invisible and hidden.
178178
/// - `offscreen`: row is not hidden but currently offscreen due to scroll position.
179+
/// - `removed`: row is removed manually.
179180
enum RowVisibility {
180181
case hidden
181182
case partial
182183
case entire
183184
case offscreen
185+
case removed
184186

185187
/// Return if row is visible.
186188
public var isVisible: Bool {
187189
switch self {
188-
case .hidden, .offscreen:
190+
case .hidden, .offscreen, .removed:
189191
return false
190192
default:
191193
return true

0 commit comments

Comments
 (0)