๐๋ฉ์ธ์ง์์ฑ ์์, ์๋ฃ์ ๋ฐ์ผ๋ก๐ ์คํฌ๋กค
๐๐ScrollViewReader?
Apple Developer Documentation - ScrollViewReader
ScrollViewReader๋ ํ๋ก์๋ฅผ ์ด์ฉํด ์์ ๋ทฐ๋ก ์คํฌ๋กคํ๊ธฐ ์ํด ํ๋ก๊ทธ๋๋งคํฑํ ์คํฌ๋กค์ ์ ๊ณตํ๋ ๋ทฐ์ด๋ค. ์คํฌ๋กค๋ทฐ๋ฅผ ์คํฌ๋กค๋ฆฌ๋๋ก ๊ฐ์ผ๋ค.
ScrollViewReader { proxy in
ScrollView {
...
}
}
@Namespace
@Namespace๋ฅผ ์ด์ฉํด id๋ฅผ ๋ถ์ฌํ๋ค.
@Namespace var topID
@Namespace var bottomID
์คํฌ๋กค ์์์ , ๋์ ์ง์ ํ๊ธฐ
์คํฌ๋กค์ ์๋ถ๋ถ์๋ ๋ฐ์ ๊ฐ๋ฆฌํค๋ ํ์ดํ chevron ๋ฒํผ์ ๋ง๋ค์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฒํผ์ด ๋๋ฆฌ๋ฉด bottomId๋ฅผ ๊ฐ์ง ๋ทฐ๋ก ์คํฌ๋กคํ๊ฒ ํ์๋ค. ๋ฐ๋๋ก ์คํฌ๋กค์ ๋ฐ์๋ ํ๋จ ์คํฌ๋กค์ ์์น๊ฐ์ ์ป๊ธฐ ์ํด ๋น HStack์ ์ถ๊ฐํ์๋ค.
ScrollViewReader { proxy in
ScrollView {
Button(
action: { withAnimation { proxy.scrollTo(bottomID) } },
label: { Image(systemName: "chevron.down").foregroundColor(Color(.systemGray2)) })
.id(topID)
...
HStack {}.id(bottomID)
}
}
๐๋ฉ์ธ์ง ์์ฑ ์์, ์๋ฃ ํ์ธ
๋ฉ์ธ์ง๊ฐ ์์ฑ๋๋ฉด messageText์ ์ ์ฅ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด๋ฉด ๋น ๋ฌธ์์ด์ด ๋๋๋ก ๋ฏธ๋ฆฌ ์ฝ๋๋ฅผ ์์ฑํ์๋ค.
@State private var messageText = ""
๋ฉ์ธ์ง ์ฒซ๊ธ์๋ฅผ ์ ๋ ฅํ์ ๋ messageText๋ ๋น ๋ฌธ์์ด์์ ๊ธธ์ด๊ฐ ์๋ ๋ฌธ์์ด๋ก ๋ฐ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด๋ฉด ๊ธธ์ด๊ฐ ์๋ ๋ฌธ์์ด์์ ๋น ๋ฌธ์์ด๋ก ๋ณํํ๋ค. ์ด ๋ณํ์ ๋ฐ๋ผ ์คํฌ๋กค์ ๋ฐ์ผ๋ก ๋ด๋ฆฌ๋ ์ ๋๋ฉ์ด์ ์ ์คํํ๋ค. onChange ํจ์๋ฅผ ์ฌ์ฉํ๊ณ , messageText == "" Bool๊ฐ ๋ณํ์ ๋ฐ๋ผ ์คํฌ๋กค์ ๋ด๋ฆฌ๋๋ก ํ์๋ค.
ScrollViewReader { proxy in
ScrollView {
Button(
action: { withAnimation { proxy.scrollTo(bottomID) } },
label: { Image(systemName: "chevron.down").foregroundColor(Color(.systemGray2)) })
.id(topID)
VStack(spacing: 16) {
ForEach(0..50) { _ in
Text("Scroll")
}
}
.onChange(of: messageText == "") { _ in
withAnimation { proxy.scrollTo(bottomID) }
}
HStack {}.id(bottomID)
}
}
๊นํ๋ธ ์ปค๋ฐ ์ฃผ์
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐๋ฉ์ธ์ง์์ฑ ์์, ์๋ฃ์ ๋ฐ์ผ๋ก๐ ์คํฌ๋กค), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@leeesangheee/SwiftUI-๋ฉ์ธ์ง-์์ฑ-์์-์๋ฃ์-์คํฌ๋กค-์ ์ฉํ๊ธฐ์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค