과제 1. content layout, frame layout 적용해서 스크롤뷰 제대로 작동하게 하기
Content Layout Guide란?
Frame Layout Guide란?
Frame Layout Guide는 스크롤뷰가 놓여진 슈퍼뷰에 비례했을 때 스크롤뷰 그 자체의 위치(x, y축)와 사이즈 (너비, 높이)에 관한 것
개발하는 정대리 튜토리얼을 따라서 스크롤 뷰의 뷰를 Content Layout Guide에 상하, 좌우 모두 space를 맞춰줌
Frame Layout Guide는 Width만 View와 동일하게 맞춰줌
결과는?? 아직 안됨 ㅠㅠ 흙.... 왜 안될까? 🤔
스크롤뷰 구현은 했지만 결국 content layout, frame layout을 적용하진 않았다 😢
Tak의 경우 content layout, frame layout을 이용하기 보단 그냥 각각의 레이블에 오토레이아웃을 적용해서 스크롤뷰를 구현했다.
좌우는 그냥 꽉 채운다는 의미로 Superview와의 constant를 0을 적용, 상하는 20 정도로 사이즈를 맞춰줌
위에 있는 레이블에서도 bottom에 대한 constraint를 적용하고, 아래에 있는 레이블에서도 위에 있는 레이블에 대해 constraint를 설정해주면 이 두개가 같은 위치에 관한 거니까 충돌이 난다
→ 근데 또 다시 보니 둘다 적용해줬는데 충돌 안나는데... 뭐지 🤔
참고 자료
취준생을 위한 아이폰 앱개발 오토레이아웃 스크롤뷰 fundamental Tutorial (2020) - ios autolayout scrollview 제공 by Kio
과제 2. 포맷에 맞게 출력하기
앞에 장소: 이런거
do {
exposition = try jsonDecoder.decode(ExpoItem.self, from: dataAsset.data)
expoTitleLabel.text = String(exposition.expoTitle)
numberOfVisitorsLabel.text = String(exposition.numberOfVisitors)
locationLabel.text = String(exposition.location)
openingPeriodLabel.text = String(exposition.openingPeriod)
descriptionLabel.text = String(exposition.description)
} catch {
print(error.localizedDescription)
}
수정 후 코드
생각해보니 원래도 json data 값이 string인데 string으로 변환해줄 필요가 없어서 다 뺐다.
넘버도 어차피 (들어갈 내용) 이런 식으로 "" string안에 들어가니까 따로 변환해줄 필요가 없음
Cory에게 혹시 이렇게 값을 라벨에 바로 넣어줘도 되는건지?
아니면 함수로 따로 빼서 넣어주는게 좋은 건지? 물어봤더니 둘중 어떤 방법을 취하든 상관없다고 함.
do {
exposition = try jsonDecoder.decode(ExpoItem.self, from: dataAsset.data)
expoTitleLabel.text = exposition.expoTitle
numberOfVisitorsLabel.text = "방문객 : \(exposition.numberOfVisitors) 명"
locationLabel.text = "개최지 : " + exposition.location
openingPeriodLabel.text = "개최 기간 : " + exposition.openingPeriod
descriptionLabel.text = exposition.description
} catch {
print(error.localizedDescription)
}
에러 나는 곳
수킴 코드를 보니 do catch 구문에서 아래 같이 do에서는 decode만 해주고
라벨에 적용될 텍스트는 밖에 빼줘서 해줬길래
나도 그렇게 시도해봤더니 안됨.
Error message: Variable 'exposition' used before being initialized (??) 🤔
일단 이건 나중에 다시 보는걸로...
(그래서 그냥 일단 실행되게 do 구문 안에 넣어줬다)
해결 방안
Cory에게 PR을 보내면서 물어보니
exposition 변수를 viewDidLoad에서 밖으로 빼면 된다고 했다 ^.^