우리가 주로 Padding값을 부여하기위해 사용되는 값은 contentInset값이다
헌데 우리가 Inset값을 따로 주지않았음에도 UICollectionView 혹은 UIScrollView와 같이 스크롤뷰가 존재하는 뷰가 일정 inset값을 부여받는 모습을 종종 확인하게 된다
일반적으로 실제 UI에 적용되는 Inset값은 system에서 적용해주는 systemInset과 개발자가 직접 부여할 수 있는 contentInset값을 합한 값이다
즉 개발자가 직접 부여해주는 Inset값 외에 시스템에서 알아서 적용해주는 부분을 조절할 수 있는게 contentInsetAdjustmentBehavior이다
위와 같은 컴포넌트를 개발해야하는 일이 생겼는데 UIButton만을 가지고 개발하기엔 피그마에 나와있는 정확한 값을 주기가 힘들다는 판단하에 UIControl을 이용하고자하였다
UIControl은 UIButton에도 상속받는 클래스로 우리가 UIButton의 touchUpInside와 같은 이벤트에 따른 동작을 구현하고싶을때 addTarget을 사용할 수 있는것이 이 때문이다
그냥 UIView만을 상속받아 UI를 넣으면 일일이 isUserInteractionEnabled를 관리해줘야한다는 단점이 존재한다
위와 같은 Alert를 개발해야하여 기존 UIAlertController를 이용하는것이 아닌 커스텀 알림창을 개발하게 되었다
Alert창을 띄어주고자하는 ViewController를 인자로 받아 해당 ViewController의 view위에 HomeAlert를 띄어주기를 의도하였다
- 해당 문제는 내가 HomeAlert을 띄어주고자하는 ViewController위에 띄어주려하니 해당 VC보다 더 최상위 VC인 UINavigationController까지 덮이지않는 이슈라 생각하였다
guard let keyWindow = UIApplication.shared.connectedScenes
.filter({$0.activationState == .foregroundActive})
.compactMap({$0 as? UIWindowScene})
.first?.windows
.filter({$0.isKeyWindow}).first else { return }
Subject와 Relay의 차이라 한다면 Subject는 해당 스트림이 오류로 끊어질 수 있지만 Relay는 끊어지지않는 특성을 가지고있다
위와 같은 특성임에도 Relay를 너무 자주 사용하면 필요치않는 낭비이기도하고 Subject를 사용함에도 데이터끊김을 본적이 없어서 신경쓰지않았다
하지만 이번 프로젝트에서 홈 화면에 첫번째 섹션에 항상 보여왔던 메인카테고리부분이 어느순간 보이지않게 되었고 프린트를 찍어도 데이터가 잘 받아와지는데 VC에서 찍힐땐 아무런 동작을 하지않게 되었다
즉 Subject이기때문에 도중에 끊김을 확인하였고 Relay로 수정하자 정상적으로 동작하였다