Skip to content

Commit bcee7e0

Browse files
committed
Prevent resizeHandler() from being called twice in one pass
1 parent 2ddc578 commit bcee7e0

File tree

2 files changed

+27
-6
lines changed

2 files changed

+27
-6
lines changed

Sources/SwiftCrossUI/Views/ForEach.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ extension ForEach where Items == [Int] {
2828
self.elements = Array(range)
2929
self.child = child
3030
}
31-
31+
3232
/// Creates a view that creates child views on demand based on a given Range
3333
@_disfavoredOverload
3434
public init(

Sources/UIKitBackend/UIKitBackend+SplitView.swift

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,38 @@ import UIKit
1818

1919
override func layoutSubviews() {
2020
super.layoutSubviews()
21-
splitWidget.resizeHandler?()
21+
if !splitWidget.hasCalledResizeHandler {
22+
splitWidget.resizeHandler?()
23+
splitWidget.hasCalledResizeHandler = true
24+
}
2225
}
2326
}
2427

2528
private final class ColumnWidget: ContainerWidget {
29+
let columnView = ColumnView()
30+
2631
override func loadView() {
27-
view = ColumnView()
32+
view = columnView
33+
}
34+
}
35+
36+
var resizeHandler: (() -> Void)? {
37+
didSet {
38+
hasCalledResizeHandler = false
39+
}
40+
}
41+
42+
// This is just a flag so that we don't call resizeHandler twice in one pass through the run loop.
43+
var hasCalledResizeHandler = false {
44+
willSet {
45+
if newValue {
46+
DispatchQueue.main.async { [weak self] in
47+
self?.hasCalledResizeHandler = false
48+
}
49+
}
2850
}
2951
}
3052

31-
var resizeHandler: (() -> Void)?
3253
private let sidebarContainer: ColumnWidget
3354
private let mainContainer: ColumnWidget
3455

@@ -42,8 +63,8 @@ import UIKit
4263
sidebarContainer.parentWidget = self
4364
mainContainer.parentWidget = self
4465
childWidgets = [sidebarContainer, mainContainer]
45-
(sidebarContainer.view as! ColumnView).splitWidget = self
46-
(mainContainer.view as! ColumnView).splitWidget = self
66+
sidebarContainer.columnView.splitWidget = self
67+
mainContainer.columnView.splitWidget = self
4768

4869
child.delegate = self
4970

0 commit comments

Comments
 (0)