코틀린 & 컴포즈 & Java/컴포즈 Compose

[Compose] 스크롤 안에 (뷰 페이저 + 스크롤) 있는 경우

코딩하는후운 2025. 2. 25. 18:24
반응형

(Column + verticalScroll) 안에 (HorizontalPager + LazyVerticalGrid)가 들어가면 wrapHeight가 안 된다.

앱이 죽는다..

에러 : Vertically scrollable component was measured with an infinity maximum height constraints, which is disallowed.

 

그 경우 .heightIn(max = VIEWPAGER_MAX_HEIGHT.dp) 로 LazyVerticalGrid의 맥스 값을 지정 해주면

해당 크기 만큼 설정이 된다.

 

문제점 : heightIn은 다음 페이지의 크기가 작아지면 wrap하게 된다. (각 페이지의 height)가 다를 수 있다.

만약 1페이지의 크기와 2페이지의 크기를 동일하게 하고 싶다면? (높이를 유지 하고 싶다면)

  • 첫번째 페이지가 제일 높이가 큰 Case였음.
modifier =
    Modifier.onSizeChanged { size ->
        maxHeightState.value = maxOf(maxHeightState.value, size.height)
    },

그리고 HorizontalPager에 height를 조건을 걸어 조정 해주었다.

.then(
    if (maxHeightState.value > 0) {
        Modifier.height(with(LocalDensity.current) { maxHeightState.value.toDp() })
    } else {
        Modifier.wrapContentHeight()
    },
),

처음부터 height를 지정해주니 그 크기로 아예 고정이 되었다.

 

하지만 이것도.. 문제가 있었다.

heightIn을 쓰면 가운데 정렬이 되어 버렸다..

나는 원초적인 방법으로 아이템(행)의 높이를 구해 line수를 곱해주어 height를 지정해 주는 방법으로 다시 해결 했다.

만약 heightIn으로 가운데 정렬이 되어도 된다면, 그 방법으로 해결 할 수 있을 것 같다.

 

 

반응형