"1997-07-07" 형태의 문자를 "July 7, 197"로 변형해야 했다.
func formatDate(_ released: String) {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMMM dd, yyyy"
let calendar = Calendar.current
let comp = released.components(separatedBy: "-").compactMap(Int.init)
let dateComp = DateComponents(year: comp[0], month: comp[1], day: comp[2])
let date = calendar.date(from: dateComp)
return dateFormatter.string(from: date)
}
dateFormatter를 활용하긴 했는데, 주어진 날짜를 Date 타입으로 변환하기 위해 calendar와 dateComponents를 사용했다.
그런데 찾아보니 dateFormatter로 날짜도 얻을 수 있는 방법이 있었다.
func formatDate(_ released: String) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let date = dateFormatter.date(from: released)
let newFormatter = DateFormatter()
newFormatter.dateFormat = "MMMM dd, yyyy"
return newFormatter.string(from: date!)
}
dateFormatter에 기존 format("yyyy-MM-dd")을 설정하고, 해당 format을 토대로 Date 타입의 날짜를 얻는다.
그리고 새로운 dateFormatter를 생성하여 원하는 형태의 문자열을 얻는 방법이다.
기존 문자열을 잘라 배열로 만들고, dateComponent로 변환하고, Date 타입을 얻는 번거로운 과정을 생략할 수 있어서 아래의 방법으로 코드를 작성하였다.
참고 블로그 - [Swift] Date() 날짜구하기, DateFormatter() 다루기 오전, 오후 등등
UIScrollView 사용법을 찾아보는데 대다수가 ContentView를 생성하여 스크롤뷰에 올린 다음, 그 위에 컨텐츠들을 올렸다.
처음에는 scrollView에 컨텐츠 레이아웃을 바로 잡으면 되는거 아닌가? 왜 contentView를 따로 생성해주지? 라고 생각했다.
그래서 우선 바로 컨텐츠를 올리는 것으로 구현했다.
func setInfoScroll() {
infoScroll.showsVerticalScrollIndicator = false
let infoStack = setInfoStack()
infoScroll.addSubview(infoStack)
infoScroll.addSubview(infoImage)
infoStack.snp.makeConstraints {
$0.trailing.top.equalToSuperview()
$0.leading.equalTo(infoImage.snp.trailing).offset(16)
}
infoImage.snp.makeConstraints {
$0.leading.top.equalToSuperview()
$0.width.equalTo(100)
$0.height.equalTo(infoImage.snp.width).multipliedBy(1.5)
}
}
infoScroll은 view.safeAreaLayoutGuide에 inset(20)으로 레이아웃이 잡혀있다.
여기서 문제가 발생했다.

infoStack의 책 제목 레이블이 화면에 맞추어 2줄로 나오지 않고, 1줄로 길게 쭉 나오는 것이다.
그리고 가로 스크롤이 가능해졌다...
아무래도 infoStack의 가로 길이가 제한되어 있지 않아 생긴 문제인듯 했다.
infoImage와 infoStack을 하나의 스택으로 만들어 가로 길이를 제한하면 해결이 될 수도 있을 것 같은데, 이후 밑으로도 컨텐츠가 추가될 예정이니 그냥 contentView를 하나 생성하는 것이 더 나을 것 같다고 판단했다.
infoScroll.addSubview(contentView)
contentView.snp.makeConstraints {
$0.edges.width.height.equalToSuperview()
}
contentView.addSubview(infoStack)
contentView.addSubview(infoImage)
위와 같이 contentView를 스크롤뷰 위에 올리고, 레이아웃을 정의해주었더니 해결되었다.
