📱 iOS 플젝 개발일지 9

[iOS/Swift] UIScrollView 안에 항목별 동적 높이를 가진 투두리스트 구현에 관한 고민 (feat. dynamic contentSize TableView)

셀프 사이징 셀, dynamic cell height 우선 이렇게 텍스트뷰 길이나 크기에 맞춰서 셀의 크기가 각자 다른 테이블뷰를 구현하려면, 테이블뷰 셀은 다음 속성으로 지정되어야한다. - rowHeight = UITableView.automaticDimension: 테이블뷰를 load하고 -> 레이아웃을 계산한 다음 -> 셀의 높이값을 알아서 재설정 - estimatedRowHeight = 44.0 : 셀의 높이를 재설정할 때 참고할만한 셀. 즉 재설정 되기 전의 디폴트 셀의 높이를 지정함 그리고 그 뒤에 문제가 있었는데, 스크롤뷰 안에 테이블뷰가 여러개 들어가있는 구조라서 API에서 내용을 불러오는 즉시 tableview의 height을 컨텐츠 내용에 맞게 지정해줄 필요가 있어 contentSize..

[iOS/Swift] 스크롤뷰 안의 테이블뷰가 모두 보이지 않는 현상 (feat. stackview)

🚨 문제 인식 아래 자세히 보면 회고를 1주일 내 이틀이상 작성했는데 짤려있는 듯 하게 보이는 현상이 있었다. ❗️ 고민 지점 / 문제 원인 - 이 또한 전에 꽤 나를 애먹였던 scrollview안의 tableview가 온전히 다 보이지 않는, contentSize 이슈인것 같아서 이쪽 위주로 다시 살펴보았다. - 여기서 1주일간 회고기록이 없을 때 보여주는 뷰가 있는데, 이 뷰도 스크롤뷰 안에 포함되어있다보니 단순한 isHidden으로는 해당 뷰가 contentView에 걸린 제약도 사라지지 않기 때문에 회고 기록이 있을 때 테이블뷰를 보여주는 부분에서 "회고 작성하러 가기 버튼"의 제약에 맞는 크기까지만 보여주는 이슈가 있었다. 이에 따라 회고 기록이 있을 때는 위 뷰의 제약을 다 지워주고, 없을 때..

[iOS/Swift] 테이블뷰 셀을 꾹 눌러야만 동작하는 이슈(Conflict UITapGestureRecognizer, didSelectRowat)

🚨 문제 인식 하단 테이블뷰 셀이 한번에 클릭이 안되고, 꾹 눌러야만 인식이 되어 tableView.rx.itemSelected (=didSelectRowAt)이 잘 동작이 되지 않는 현상이 있었다. ❗️ 문제 원인 여러 사이트를 통해 원인을 찾아보니 해당 VIewController가 상속하고 있는 BaseViewController에서 화면을 탭했을 때 키보드가 사라지게 하는 액션을 취하기 위해 추가한 UITapGestureRecognizer가 cell의 클릭을 방해하고 있었던 것으로 짐작되었는데 https://stackoverflow.com/questions/8904368/conflicting-uitapgesturerecognizer-in-uiview-and-for-uitableview Conflict..

[iOS/Swift] 앱을 백그라운드에서 다시 돌아오면 캘린더에서 이전 날짜가 오늘 날짜로 표시되는 현상 (생명주기)

Issue - 3월 20일에 위 타이틀 23.03.19로 표시 되는 현상 + 홈 달력에서 19일이 오늘 날짜로 표시하는 파란색 원으로 표시되는 현상이 제보되었음. - 앱을 종료하지 않고 백그라운드 상태로 두었다가 다시 진입했을 때 나타나는 현상인 것으로 보아 생명주기 관련 이슈인것으로 확인되어서, 뷰 컨트롤러/앱 생명주기 개념을 다시 되짚어보면서 원인을 찾아보기로 했다. - 덕분에 이 포스트도 보완하면서 다시 뷰 컨트롤러 + 앱 생명주기에 대해 이해해보는 계기가 되었다. Problem - 날짜와 캘린더를 viewDidLoad에서 세팅하게 되면서, 앱이 백그라운드에 있다가 다시 돌아올 때에는 viewDidLoad가 이미 실행되어있고 그 이후에 초기화하는 코드가 실행되지 않으므로 이전 데이터로 남아있었음이 ..

[iOS/Swift] 키보드로 인해 채팅창(UITableView)이 가려지는 불편함 해결

🚨 Issue 돌보고 있던 사이드 프로젝트에서 키보드로 인해 특정 영역이 보이지 않아 불편한 점이 보여서 이를 해결해보고싶었다. 아래 내용이 보이지가 않는다 🥲 사용자 입장에서 매우 불편. 💡 Idea 다른분들은 어떻게 해결했는지 레퍼런스를 찾아봤다. 보통 키보드가 등장할 때 뷰의 y 좌표를 위로 조정하고, 사라질 때 다시 아래로 내리는 방식으로 하는것같았다. 이 방식은 원래 텍스트뷰를 위로 올릴 때 사용하던 방식이기는 했는데, 아래 내용까지 보일 수 있도록 다시 적용해보기로 했다. ✅ 채팅 테이블뷰 아래 내용까지 보일 수 있도록 테이블뷰가 위쪽으로 스크롤 되도록 해결 과정 1) 처음 테이블뷰도 마찬가지로 frame의 y를 뺐다가 더하는 쪽으로 했는데 아래와 같이 처참한 결과 발생.. override f..

[iOS/Swift] UITableView 행 삭제를 빠르게 했을 때 앱 크래쉬 나는 현상 (App Crash When Deleting row fastly)

1) Issue 사이드프로젝트의 QC를 진행하던 중, 아래 테이블뷰 옆에 달려있는 행 삭제 버튼을 빠르게 연타(삭제 버튼을 누르면 해당 항목이 삭제되고 그 다음 항목이 올라오게 되는데, 그 버튼을 계속 빠르게 연타했을 때의 상황이었음) 했을 때 앱이 크래쉬난다는 이야기를 팀원으로부터 들을 수 있었고 Firebase Crashlytics의 내용을 살펴보니 아래 내용에서 크래쉬가 나고 있었음을 알 수 있었다. 아래 코드는 현재 내가 누른 셀의 테이블뷰에서의 indexPath를 가져오는 코드이다. 에러는 'doneTableView의 현재 cell의 indexPath를 가져올 수 없다. nil값인데 강제로 왜 언래핑 하려고 하니!' 라는 에러였다. 2) Problem 우선 cell에 해당하는 indexPath가..

[iOS/Swift] CollectionView의 cell 내용이 다른 cell 내용과 섞이는 이슈 해결

1. Issue 영상과 같이, collectionview 안의 이미지 collectionview의 contents가 스크롤했다가 위로 올라가면 내용이 바뀌는 이슈가 있었음 2. Problem UITableView/UICollectionView의 cell은, 스크롤할 때 스크롤 하기 전 보여주었던 셀을 재사용하기 때문에 이미 이전에 보여주었던 이미지를 사용함으로써, 스크롤했다가 다시 올라가면 이전에 아래로 스크롤했을 때의 셀의 이미지를 보여주게 됨 3. Solution 컬렉션뷰가 셀을 그릴때, 셀의 내용을 초기화하여 뷰를 다시 그리는 'prepareForReuse' 메소드를 override 하여, 이미지를 초기화해준다. 이렇게 이미지를 초기화한 이후에 cellForRowAt을 거쳐 뷰를 다시 그리게된다.

[iOS/Swift] UIScrollview 원리 / 코드로 구현하기 (UIScrollView Programatically/snapkit)

(사이드 프로젝트에서 스크롤뷰로 삽질을 정말 많이해서 정리해보는 포스트....😠) 스크롤뷰 구현의 핵심을 정리해보면 다음과 같습니다. 1. contentView의 constraint는 scrollView 사면에 맞추기 (top, leading, trailing, bottom -> equal to scrollView) 2. view에 scrollView를 추가하고, scrollView에 contentView 추가 및 contentView에 뷰를 구성하는 요소들을 추가한다. 3. 세로 스크롤뷰의 경우 contentView의 width는 scrollView의 width와 동일하게, 가로 스크롤뷰의 경우 contentView의 height을 scrollView의 height과 동일하게 맞춘다. 4. conten..

[iOS/Swift] 사이드프로젝트 버그 정리

1. 처음 회원가입 후 진입시에 API가 동작하지 않는 현상 - 원인 : API에 사용되는 헤더(jwt값)가 'static' 즉 정적변수이기때문에 프로그램 처음 실행할 때 한 번 값이 할당된 이후에는 값이 바뀌지 않음 reference : https://wikidocs.net/228 07-03 정적(static) 변수와 메소드 이번에는 스태틱(static)에 대해서 알아보자. [TOC] ## static 변수 예를 들어 다음과 같은 HouseLee 클래스가 있다고 하자. *Sample. ... wikidocs.net - 해결 : 앱 실행 후에 회원탈퇴 후 재가입 혹은 기타 계정으로 로그인하는 경우까지 고려해야하므로 정적이 아닌 동적 변수로 선언 후 동적으로 값 할당 2. 텍스트필드가 키보드에 의해 가려지..

반응형