TableViewCell이나 CollectionViewCell은 공통점이 있습니다. 그건 바로 셀을 재사용한다는 건데요. 만약 30개의 셀에 각각의 다른 내용을 넣어야한다고 가정했을 때 30개의 셀을 만들어서 관리하면 그만큼 자원을 많이 가져가기 때문에 셀을 몇개만 만들어놓고 돌려씁니다. extension SecondViewController: UITableViewDataSource, UITableViewDelegate { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 30 } func tableView(_ tableView: UITableView, cellForRowAt indexPa..
원하는대로 컬렉션뷰 셀 크기 정하기 CollectionViewCell의 크기를 정할때는 UICollectionViewDelegateFlowLayout의 메서드를 이용합니다. 컬렉션뷰의 Scroll Direction이 Vertical일 때를 기준으로 작성하고 있습니다. 셀크기를 정하기 전에 알아야 할 것들 minimumLineSpacing Verically scrolling layout에서는 최소 라인 스페이싱이 그림과 같습니다. 셀이 계속 추가되면 아래에 줄이 생깁니다. 그 아래 줄과의 최소 간격인데요. 셀크기가 다양할때 최소한 이만큼은 떨어져 있다를 뜻합니다. 좌우간격의 최소값은 minimumInteritemSpacing입니다. var minimumInteritemSpacing: CGFloat { ge..
UNUserNotificationCenterDelegate를 상속해주세요. UNUserNotificationCenter가 필요하고 noti 허가를 위한 request를 해야합니다. UNNotificationContent에서는 알림 내용을 설정할 수 있습니다. Trigger에는 다양한 종류가 있습니다. 저는 UNCalendarNotificationTrigger를 사용했는데요. 정확한 날짜와 시간에 맞게 알람을 보내야하기 때문입니다. 만약에 60분 후에 알람이 울려야한다면 timeInterval에 60*60을 넣어서 간단하게 설정할 수도 있겠네요. UNCalendarNotificationTrigger는 DateComponents를 만들어야합니다. let dateComponents = Calendar.curr..
date()에 하루 더하기 let date = Date() print(date) let date1 = Calendar.current.date(byAdding: .day, value: 1, to: date) print(date1) let date2 = Calendar.current.date(byAdding: .hour, value: 1, to: date) print(date2!) //2020-11-18 12:48:07 +0000 //Optional(2020-11-19 12:48:07 +0000) //2020-11-18 13:48:07 +0000 테스트 시간은 21시48분인데 print에는 12:48으로 나옵니다. 이것은 date()가 UTC 00:00 기준이기 때문입니다. (print할때만 UTC 00:0..