해결된 질문
작성
·
33
1
안녕하세요 선생님. wordRelay 강의 잘 수강하였습니다. 강의를 다 수강한 뒤에 복습하고자 수업 진행했던 코드를 처음부터 다시 따라 치던 와중에 끝말잇기 게임 타이틀과 단어 입력창, 확인 버튼 밑에 Spacer를 따로 넣지 않고 List만 넣어도 위치가 원하는대로 위로 올라가는데, 그럼 Spacer는 따로 넣어주지 않아도 되는건가요? Spacer를 넣는 것과는 어떤 차이가 있나요?
import SwiftUI
struct ContentView: View {
let title: String = "끝말잇기 게임"
@State var nextWord = ""
@State var words: [String] = ["Apple", "Elsa", "Alin"]
@State var showAlert: Bool = false
var body: some View {
VStack {
Text(title)
.padding(.horizontal, 12)
.padding(.vertical, 16)
.font(.title)
.bold()
.background(
RoundedRectangle(cornerRadius: 15)
.fill(.purple)
.opacity(0.3)
.shadow(radius: 5)
)
.padding(.top, 10)
}
HStack {
TextField("단어를 입력하세요", text: $nextWord)
.padding()
.background(
RoundedRectangle(cornerRadius: 10)
.stroke(lineWidth: 2)
)
Button(action: {
if words.last?.last?.lowercased() == nextWord.first?.lowercased() {
words.append(nextWord)
nextWord = ""
} else {
showAlert = true
nextWord = ""
}
}, label: {
Text("확인")
.foregroundStyle(Color.white)
.padding()
.background(
RoundedRectangle(cornerRadius: 10)
)
})
.alert("끝말이 이어지는 단어를 입력하세요", isPresented: $showAlert) {
Button("확인", role: .cancel) {
showAlert = false
}
}
}
.padding(.horizontal)
.padding(.top)
List {
ForEach(words.reversed(), id: \.self) {
word in
Text(word)
.font(.title)
}
}
.listStyle(.plain)
// 선생님은 여기에 Spacer()를 넣으셨는데
// 입력하지 않아도 타이틀과 단어 입력창의 위치가
// 위로 올라갑니다
}
}
#Preview {
ContentView()
}
답변 1
0
안녕하세요 Minari님
답변이 늦은점 죄송합니다. ㅜㅜ
이해하시고 있는대로 Spacer가 최대한 자리를 차지해서 위의 뷰들이 상단으로 보내주는 역할을 하는게 맞습니다.
다만 지금은 List뷰가 잇어서 Spacer의 역할이 의미가 없어졌는데요
List도 Spacer처럼 자기 자신이 차지할 수 있는 최대한의 영역을 차지하게 되서 그렇습니다.
그럼에도 Spacer를 넣었던 이유는 List뷰가 없었을때 나머지 뷰들이 최상단으로 가게 하기 위함있었습니다.
혹시 확인하고 싶으시면 List뷰를 주석처리한다음에 Spacer를 넣었다가 빼보면 차이를 알 수 있으실거에요
강의 들어주셔서 감사합니다~