[#185] TodoDetailView에서 내비게이션타이틀의 라지 사이즈만큼 영역을 먹고 있는 현상을 해결한다#189
[#185] TodoDetailView에서 내비게이션타이틀의 라지 사이즈만큼 영역을 먹고 있는 현상을 해결한다#189
Conversation
opficdev
commented
Mar 5, 2026
- closed TodoDetailView에서 내비게이션타이틀의 라지 사이즈만큼 영역을 먹고 있는 현상을 해결한다 #185
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! 이 PR은 Highlights
Changelog
Activity
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
There was a problem hiding this comment.
Code Review
이 풀 리퀘스트는 TodoDetailView에서 내비게이션 타이틀의 라지 사이즈로 인해 발생하는 영역 문제를 해결하고, TodoListView와 PushNotificationListView에 스크롤 오프셋 추적 및 커스텀 내비게이션 바 배경 설정을 추가합니다. 또한, iOS 18 미만 버전을 위한 스크롤 오프셋 추적 기능을 구현하여 하위 호환성을 확보했습니다. 전반적으로 기능 개선 및 UI/UX 향상에 기여하는 좋은 변경사항입니다.
I am having trouble creating individual review comments. Click here to see my feedback.
DevLog/UI/PushNotification/PushNotificationListView.swift (98-102)
이전 코드에서는 NavigationStack의 .overlay에 LoadingView가 있었으나, 현재 변경사항에서는 제거되었습니다. viewModel.state.isLoading이 true일 때 사용자에게 로딩 피드백을 제공하는 부분이 사라져, 데이터 로딩 중 사용자 경험이 저하될 수 있습니다. 로딩 상태를 명확히 표시할 수 있는 다른 방법을 고려해야 합니다.
DevLog/UI/Common/NavigationBarConfigurator.swift (34-41)
내비게이션 바의 standardAppearance, scrollEdgeAppearance, compactAppearance, compactScrollEdgeAppearance에 대해 shadowColor와 backgroundColor를 설정하는 코드가 반복됩니다. 이 부분을 헬퍼 메서드로 추출하여 코드 중복을 줄이고 가독성을 높일 수 있습니다.
예를 들어, configureAppearance(_ appearance: UINavigationBarAppearance, with color: UIColor)와 같은 메서드를 만들어 중복 코드를 제거할 수 있습니다.
navigationBar.standardAppearance = configureAppearance(navigationBar.standardAppearance, with: backgroundColor)
navigationBar.scrollEdgeAppearance = configureAppearance(navigationBar.scrollEdgeAppearance ?? UINavigationBarAppearance(), with: backgroundColor)
navigationBar.compactAppearance = configureAppearance(navigationBar.compactAppearance ?? UINavigationBarAppearance(), with: backgroundColor)
navigationBar.compactScrollEdgeAppearance = configureAppearance(navigationBar.compactScrollEdgeAppearance ?? UINavigationBarAppearance(), with: backgroundColor)
}
}
private func configureAppearance(_ appearance: UINavigationBarAppearance, with color: UIColor) -> UINavigationBarAppearance {
let newAppearance = appearance
newAppearance.shadowColor = .clear
newAppearance.backgroundColor = color
return newAppearance
DevLog/UI/Common/NavigationBarConfigurator.swift (48-55)
마찬가지로 dismantleUIViewController 메서드에서도 내비게이션 바의 shadowColor와 backgroundColor를 원래 값으로 복원하는 코드가 반복됩니다. 이 부분도 헬퍼 메서드를 사용하여 코드 중복을 줄일 수 있습니다.
navigationBar.standardAppearance = restoreAppearance(navigationBar.standardAppearance, originalShadowColor: coordinator.originalShadowColor, originalBackgroundColor: coordinator.originalBackgroundColor)
navigationBar.scrollEdgeAppearance = restoreAppearance(navigationBar.scrollEdgeAppearance ?? UINavigationBarAppearance(), originalShadowColor: coordinator.originalShadowColor, originalBackgroundColor: coordinator.originalBackgroundColor)
navigationBar.compactAppearance = restoreAppearance(navigationBar.compactAppearance ?? UINavigationBarAppearance(), originalShadowColor: coordinator.originalShadowColor, originalBackgroundColor: coordinator.originalBackgroundColor)
navigationBar.compactScrollEdgeAppearance = restoreAppearance(navigationBar.compactScrollEdgeAppearance ?? UINavigationBarAppearance(), originalShadowColor: coordinator.originalShadowColor, originalBackgroundColor: coordinator.originalBackgroundColor)
}
private func restoreAppearance(_ appearance: UINavigationBarAppearance, originalShadowColor: UIColor?, originalBackgroundColor: UIColor?) -> UINavigationBarAppearance {
let newAppearance = appearance
newAppearance.shadowColor = originalShadowColor
newAppearance.backgroundColor = originalBackgroundColor
return newAppearance
DevLog/UI/Home/TodoListView.swift (303-308)
isScrollTrackingEnabled를 DispatchQueue.main.asyncAfter를 사용하여 0.3초 지연 후 활성화하는 방식은 레이아웃이 완전히 적용되지 않은 상태에서 스크롤 추적이 시작되는 것을 방지하기 위한 일반적인 해결책입니다. 하지만 이 고정된 지연 시간은 모든 기기 및 시스템 조건에서 안정적임을 보장하지 못할 수 있습니다. 경우에 따라 초기 스크롤 동작이 예상과 다르게 나타날 수 있는 잠재적인 불안정성이 있습니다. 더 견고한 방법이 있다면 고려해볼 수 있습니다.
DevLog/UI/PushNotification/PushNotificationListView.swift (205-210)
isScrollTrackingEnabled를 DispatchQueue.main.asyncAfter를 사용하여 0.3초 지연 후 활성화하는 방식은 레이아웃이 완전히 적용되지 않은 상태에서 스크롤 추적이 시작되는 것을 방지하기 위한 일반적인 해결책입니다. 하지만 이 고정된 지연 시간은 모든 기기 및 시스템 조건에서 안정적임을 보장하지 못할 수 있습니다. 경우에 따라 초기 스크롤 동작이 예상과 다르게 나타날 수 있는 잠재적인 불안정성이 있습니다. 더 견고한 방법이 있다면 고려해볼 수 있습니다.