210416 Fri

문제점/고민한점 → 해결방안

과제 1. content layout, frame layout 적용해서 스크롤뷰 제대로 작동하게 하기

Content Layout Guide란?

  • Content Layout Guide는 스크롤 뷰 내의 스크롤 할 수 있는 콘텐츠 영역에 관한 것
  • 충분한 constraints를 설정해서 Auto Layout이 너비와 높이와 함께 스크롤이 가능한 content area (Content Layout)을 계산할 수 있게 해줘야 함

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에서 밖으로 빼면 된다고 했다 ^.^

좋은 웹페이지 즐겨찾기