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에서 밖으로 빼면 된다고 했다 ^.^
Author And Source
이 문제에 관하여(210416 Fri), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sunnywhynot/210416-Fri저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)