Skip to content

Commit f3e476c

Browse files
committed
ios: honor usePreferredSizeSizing in ComposeContainer
1 parent 94b9b3a commit f3e476c

1 file changed

Lines changed: 21 additions & 21 deletions

File tree

compose/ui/ui/src/iosMain/kotlin/androidx/compose/ui/scene/ComposeContainer.ios.kt

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,8 @@ internal class ComposeContainer(
9797
transparentForTouches = false,
9898
useOpaqueConfiguration = configuration.opaque,
9999
).apply {
100-
onSizeThatFits = ::onSizeThatFits
101-
onIntrinsicContentSize = ::onIntrinsicContentSize
100+
onSizeThatFits = { composeSceneSizeSynchronizer?.onSizeThatFitsRequest(it) }
101+
onIntrinsicContentSize = { composeSceneSizeSynchronizer?.preferredCGSize }
102102
}
103103

104104
private var mediator: ComposeSceneMediator? = null
@@ -126,15 +126,23 @@ internal class ComposeContainer(
126126
getTopLeftOffsetInWindow = { IntOffset.Zero }, //full screen
127127
endEdgePanGestureBehavior = configuration.endEdgePanGestureBehavior
128128
)
129-
private val composeSceneSizeSynchronizer = ComposeSceneSizeSynchronizer(
130-
view = view,
131-
composeSceneSize = { constraints ->
132-
mediator?.constrainedSceneSize(constraints) ?: IntSize.Zero
133-
},
134-
invalidateComposeSceneContainerSize = {
135-
view.superview?.invalidateIntrinsicContentSize()
129+
130+
private val composeSceneSizeSynchronizer: ComposeSceneSizeSynchronizer? =
131+
if (configuration.useSelfSizing) {
132+
ComposeSceneSizeSynchronizer(
133+
view = view,
134+
composeSceneSize = { constraints ->
135+
mediator?.constrainedSceneSize(constraints) ?: IntSize.Zero
136+
},
137+
invalidateComposeSceneContainerSize = {
138+
// SwiftUI observes the hosting view’s intrinsic size, not the internal Compose
139+
// container view.
140+
view.superview?.invalidateIntrinsicContentSize()
141+
}
142+
)
143+
} else {
144+
null
136145
}
137-
)
138146

139147
val hasInteropViews: Boolean get() = mediator?.hasInteropViews ?: false
140148

@@ -199,14 +207,6 @@ internal class ComposeContainer(
199207
lifecycleDelegate.windowScene = window.windowScene
200208
}
201209

202-
private fun onSizeThatFits(size: CValue<CGSize>): CValue<CGSize>? {
203-
return composeSceneSizeSynchronizer.onSizeThatFitsRequest(size)
204-
}
205-
206-
private fun onIntrinsicContentSize(): CValue<CGSize>? {
207-
return composeSceneSizeSynchronizer.preferredCGSize
208-
}
209-
210210
fun updateInterfaceOrientationState() {
211211
currentInterfaceOrientation?.let {
212212
interfaceOrientationState.value = it
@@ -287,9 +287,9 @@ internal class ComposeContainer(
287287
}
288288

289289
onLayoutCompletedListenerHandle?.close()
290-
onLayoutCompletedListenerHandle = mediator?.registerOnLayoutCompletedListener(
291-
composeSceneSizeSynchronizer::onComposeLayoutCompleted
292-
)
290+
onLayoutCompletedListenerHandle = composeSceneSizeSynchronizer?.let {
291+
mediator?.registerOnLayoutCompletedListener(it::onComposeLayoutCompleted)
292+
}
293293

294294
activeStateListener = SceneActiveStateListener(
295295
getScene = ::windowScene

0 commit comments

Comments
 (0)