PLUB 개발회고 (3)

이건준·2023년 2월 6일
0

contentInsetAdjustmentBehavior

  • 우리가 주로 Padding값을 부여하기위해 사용되는 값은 contentInset값이다

  • 헌데 우리가 Inset값을 따로 주지않았음에도 UICollectionView 혹은 UIScrollView와 같이 스크롤뷰가 존재하는 뷰가 일정 inset값을 부여받는 모습을 종종 확인하게 된다

  • 일반적으로 실제 UI에 적용되는 Inset값은 system에서 적용해주는 systemInset과 개발자가 직접 부여할 수 있는 contentInset값을 합한 값이다

즉 개발자가 직접 부여해주는 Inset값 외에 시스템에서 알아서 적용해주는 부분을 조절할 수 있는게 contentInsetAdjustmentBehavior이다

UIControl

  • 위와 같은 컴포넌트를 개발해야하는 일이 생겼는데 UIButton만을 가지고 개발하기엔 피그마에 나와있는 정확한 값을 주기가 힘들다는 판단하에 UIControl을 이용하고자하였다

  • UIControl은 UIButton에도 상속받는 클래스로 우리가 UIButton의 touchUpInside와 같은 이벤트에 따른 동작을 구현하고싶을때 addTarget을 사용할 수 있는것이 이 때문이다

  • 그냥 UIView만을 상속받아 UI를 넣으면 일일이 isUserInteractionEnabled를 관리해줘야한다는 단점이 존재한다

dimmedView가 기본 네비게이션바를 덮지않는 이슈

  • 위와 같은 Alert를 개발해야하여 기존 UIAlertController를 이용하는것이 아닌 커스텀 알림창을 개발하게 되었다

  • Alert창을 띄어주고자하는 ViewController를 인자로 받아 해당 ViewController의 view위에 HomeAlert를 띄어주기를 의도하였다

이슈 발생

  • 헌데 기본으로 제공되는 네비게이션바 부분만 dimmedView로 안채워지는 문제가 발생하였다
  • 해당 문제는 내가 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 }
  • 그래서 화면상 보이는 최상위 화면을 가져와 해당 화면에 HomeAlert를 뿌려주었고 그 결과 해당 이슈를 해결하였다

Rx Relay의 중요성

  • Subject와 Relay의 차이라 한다면 Subject는 해당 스트림이 오류로 끊어질 수 있지만 Relay는 끊어지지않는 특성을 가지고있다

  • 위와 같은 특성임에도 Relay를 너무 자주 사용하면 필요치않는 낭비이기도하고 Subject를 사용함에도 데이터끊김을 본적이 없어서 신경쓰지않았다

  • 하지만 이번 프로젝트에서 홈 화면에 첫번째 섹션에 항상 보여왔던 메인카테고리부분이 어느순간 보이지않게 되었고 프린트를 찍어도 데이터가 잘 받아와지는데 VC에서 찍힐땐 아무런 동작을 하지않게 되었다

  • 즉 Subject이기때문에 도중에 끊김을 확인하였고 Relay로 수정하자 정상적으로 동작하였다

0개의 댓글