Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

InfiniteScroll을 Content Size Fitter와 함께 사용하는 문의 #517

Open
1 of 9 tasks
lumiereent opened this issue Jun 10, 2024 · 8 comments
Open
1 of 9 tasks
Assignees
Labels
question Issue type : Question UI Service : UI

Comments

@lumiereent
Copy link

lumiereent commented Jun 10, 2024

Service

  • WebView
  • AssetManagement
  • Communicator
  • LogViewer
  • Manager
  • UI
  • Profiler
  • Adapter
  • DLST

Version

Common 2.4.0 / UI 2.9.0

Summary

스크롤 내에는 한개의 프리팹만 사용 가능하기에 첨부한 스크린샷과 같이 GenericObject를 만들어
자식 컴포넌트로 4가지 타입의 파생 오브젝트를 만들었습니다.

처음에는 자식 오브젝트를 4개 다 OFF를 시킨 상태에서 시작하며
4개의 오브젝트 중 필요한 것 1개의 오브젝트만 ON시키고 3개는 OFF시키는 방식입니다.

부모도 Vertical Layout Group + Content Size Fitter로 최종 사이즈가 결정되고
4개의 자식들도 모두 Vertical Layout Group + Content Size Fitter 로 사이즈가 동적 확장됩니다.

ex) 글자수에 따라 MyBubbleChatElement의 높이가 150이 되면
최종적으로 GenericChatElement도 높이가 150이 됩니다.

이런 구조일 경우 Dynamic Item Size를 적용하기 힘든 형태일까요?
테스트 해 보았을때 Content 전체 길이를 잘 인지하지 못하는 것 같아 오작동하기에 문의드립니다.

Screenshots

Scroll
Scroll2

Additional context

Add any other context about the problem here.

@lumiereent lumiereent added the question Issue type : Question label Jun 10, 2024
@SangYun-nhn SangYun-nhn added the UI Service : UI label Jun 10, 2024
@smflt-nhn
Copy link
Contributor

smflt-nhn commented Jun 10, 2024

@lumiereent
ContentsSizeFitter가 사이즈를 조절할 때 컴포넌트 내 Update로직을 통해 사이즈가 조절되고 보통 다음 프레임에 설정됩니다.
때문에 Content Size Fitter와 Vertical Layout Group를 같이 썼을 때 타이밍에 따라 확장되지 않아 오류처럼 보이는 이슈가 있습니다.

InfiniteScroll도 마찬가지로 내부 Update로직에 따라 사이즈 변경 시 반영됩니다. 내부 item 사이즈가 바뀔 경우 적용되는 로직이 있기 때문에 최종적인 사이즈는 맞을텐데 동기화 할 타이밍이 다를 때 자연스럽지 않게 보일 수 있습니다.
또한 ContentsSizeFitter통한 Size가 활성화될 때 적용되기 때문에 이슈가 더 커보일 수 있습니다.

InfiniteScroll도 그렇고 Dynamic Item Size를 적용했을 때도 타이밍이 다르고 ContentsSizeFitter는 활성화 되야 동작하기 때문에 스크롤 사이즈를 맞추기 힘든 환경일 수 있습니다.

글자수의 사이즈에 따라 높이가 결정될 때 자연스럽게 스크롤에 반영하려면 text의 preferredHeight를 사용하여 스크롤 사이즈를 즉시 반영하는것이 좋습니다.

추가로 preferred 이슈로 활성화 되지 않거나 최소에 size가 0이 나오는 경우가 있습니다. 이때 한 프레임 다음에 반영한 사이즈가 정확합니다.

@lumiereent
Copy link
Author

안녕하세요 답변 감사합니다. 해당 이슈에 대해서는 이해는 되었습니다.

그러면 사이즈 조정을 ContentsSizeFitter 컴포넌트에 의존하지 않고 즉시 갱신해야 갱신 문제없이 정상작동하는것으로 이해되는데

현재 텍스트 출력은 TextMeshProUGUI컴포넌트를 사용하고 있습니다.
여기에도 높이가 즉시 반영되는 preferredHeight 기능이 있는 것일까요? 아니면 해당 기능을 직접 만들어야 하는 것일까요

혹은 Content Size Fitter를 사용하고도 즉시 동기화가 되는 방법이 유니티에서 있을까요?

@smflt-nhn
Copy link
Contributor

smflt-nhn commented Jun 10, 2024

@lumiereent

TextMeshProUGUI에 preferredHeight 가 있습니다.
다만 preferred 이슈는 똑같이 있습니다.
해결하는 방식은 사이즈가 변경된 이후 즉시 반영되야할 부모 Layout에
LayoutRebuilder.ForceRebuildLayoutImmediate로 재조정 하거나

코루틴을 이용해서 다음 프레임에서 사이즈가 다시 설정되게 하는 방법이 있습니다.
또는 개발 스팩 예상되는 사이즈를 정해 미리 반영하는 방법도 있을것 같습니다.
사이즈가 비슷할 경우 오동작같이 보이는 문제가 최소화될것입니다.

https://forum.unity.com/threads/preferred-width-height-sometimes-0.980022/

@lumiereent
Copy link
Author

감사합니다 자체적으로 사이즈를 조정하는 코드를 작성해 해결해보겠습니다.

@lumiereent
Copy link
Author

안녕하세요 위 이슈는 자체적으로 조정해서 해결했는데
예전부터 계속 발생한 현상에 대해 문의드리고자 추가적으로 남깁니다.

Scroll View오브젝트가 0,0이 아닌 (180,0) 좌표에 세팅되어 있는 경우
처음에는 정상적으로 Content 초기값이 Left 0 Right 0 으로 문제없이 나오지만

_infiniteScroll.Clear()이후 _infiniteScroll.InsterData()로 재배치를 할 경우
아래 스크린샷처럼 간혹 Content의 Left, Right 크기가 180만큼 밀려서 세팅되어서

안에 내용물이 전부 180만큼 오른쪽으로 한번 더 밀려서
스크롤 내부영역을 벗어나 잘리는 현상이 있습니다.

캡처

@smflt-nhn
Copy link
Contributor

@lumiereent
안녕하세요. 해당 이슈는 재현이 안되고 있는데요.
Viewport layout 설정 등 힌트를 얻을 수 있는 조건이 있을까요?

@lumiereent
Copy link
Author

lumiereent commented Jun 24, 2024

ScrollView의 PosX를 0으로 세팅하면 아무런 문제가 없으나
캡쳐본에서 보시는 바와 같이 ScrollView PosX를 0이 아닌 값으로 세팅하는 경우

팝업 창을 닫음 -> 팝업 창을 여는 동시에 InsertData와 _infiniteScroll.MoveToLastData()를 호출
이때마다 +100씩 누적해서 Content 좌표가 이동하는 현상이 있습니다.
(Content 의 초기 좌표값은 0,0이였습니다)

이 현상은 Dynamic Item Size를 사용안하는 스크롤에도 발생합니다.

캡처1
캡처2
캡처3

@smflt-nhn
Copy link
Contributor

smflt-nhn commented Jul 11, 2024

@lumiereent

안녕하세요

현재 정보로는 재현 조건을 알 수 없어 수정이 힘들 것 같습니다.

추후 원인이 파악될 경우 수정하겠습니다.

감사합니다.

contents이동재현

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Issue type : Question UI Service : UI
Projects
None yet
Development

No branches or pull requests

3 participants