[내일배움캠프] 260126 TIL - dateFormatter

Bambu·2026년 1월 26일

내배캠 TIL

목록 보기
26/52

1. 앱 개발 입문 과제

1) dateFormatter

"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 타입으로 변환하기 위해 calendardateComponents를 사용했다.

그런데 찾아보니 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() 다루기 오전, 오후 등등

2) UIScrollView의 ContentView

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)
        }
    }

infoScrollview.safeAreaLayoutGuideinset(20)으로 레이아웃이 잡혀있다.

여기서 문제가 발생했다.

infoStack의 책 제목 레이블이 화면에 맞추어 2줄로 나오지 않고, 1줄로 길게 쭉 나오는 것이다.

그리고 가로 스크롤이 가능해졌다...

아무래도 infoStack의 가로 길이가 제한되어 있지 않아 생긴 문제인듯 했다.

infoImageinfoStack을 하나의 스택으로 만들어 가로 길이를 제한하면 해결이 될 수도 있을 것 같은데, 이후 밑으로도 컨텐츠가 추가될 예정이니 그냥 contentView를 하나 생성하는 것이 더 나을 것 같다고 판단했다.

infoScroll.addSubview(contentView)

contentView.snp.makeConstraints {
	$0.edges.width.height.equalToSuperview()
}
contentView.addSubview(infoStack)
contentView.addSubview(infoImage)

위와 같이 contentView를 스크롤뷰 위에 올리고, 레이아웃을 정의해주었더니 해결되었다.

profile
안녕하세요, iOS 개발을 공부하고 있는 Bambu입니다. (프로필: Swifticons)

0개의 댓글