Skip to content

feat: 독서 기록 완료 / 기록 상세 화면 구현#114

Merged
clxxrlove merged 14 commits into
developfrom
BOOK-182-feature/#113
Jul 29, 2025
Merged

feat: 독서 기록 완료 / 기록 상세 화면 구현#114
clxxrlove merged 14 commits into
developfrom
BOOK-182-feature/#113

Conversation

@clxxrlove
Copy link
Copy Markdown
Member

@clxxrlove clxxrlove commented Jul 28, 2025

🔗 관련 이슈

📘 작업 유형

  • ✨ Feature (기능 추가)
  • 🐞 Bugfix (버그 수정)
  • 🔧 Refactor (코드 리팩토링)
  • ⚙️ Chore (환경 설정)
  • 📝 Docs (문서 작성 및 수정)
  • ✅ Test (기능 테스트)
  • 🎨 style (코드 스타일 수정)

📙 작업 내역

  • 기존 SearchResultCell 분리
    • 해당 Cell의 레이아웃이 여러 곳에서 재사용되므로, 분리 작업 진행
  • BKDialog에 뷰 주입 기능 추가
  • 독서 기록 상세 화면 추가
  • NoteView 레이아웃 이슈 해결
    -> 작은 기기(SE)에서 스크롤 작동 확인, Constraint 충돌 제거 완료
  • 독서 기록 중단 시 경고 Dialog 추가
  • NoteCompletionViewController가 죽을 때 NoteView도 같이 정리되도록 변경

🧪 테스트 내역

  • 브라우저/기기에서 동작 확인
  • 엣지 케이스 테스트 완료
  • 기존 기능 영향 없음

🎨 스크린샷 또는 시연 영상 (선택)

iPhone 13 Pro Max, CancelconfirmationDialog 반영 (실기기)

ScreenRecording_07-29-2025.14-53-47_1.MP4

iPhone 13 Pro Max (실기기)

ScreenRecording_07-29-2025.15-07-50_1.MP4

iPhone SE (3rd, 시뮬레이터)

Simulator.Screen.Recording.-.iPhone.SE.3rd.generation.-.2025-07-29.at.14.36.17.mp4

✅ PR 체크리스트

  • 커밋 메시지가 명확합니다
  • PR 제목이 컨벤션에 맞습니다
  • 관련 이슈 번호를 작성했습니다
  • 기능이 정상적으로 작동합니다
  • 불필요한 코드를 제거했습니다

Summary by CodeRabbit

  • 신규 기능

    • 책 요약, 감상 결과, 수집 문장 등 독서 기록을 한눈에 볼 수 있는 새로운 뷰와 화면이 추가되었습니다.
    • 감상평 등록 완료 시 마스코트 이미지와 함께 확인 다이얼로그가 표시되며, 기록 화면으로 이동할 수 있습니다.
    • 책 요약 정보를 한 번에 보여주는 컴포넌트가 도입되어 검색 결과 등에서 활용됩니다.
  • 기능 개선

    • 다이얼로그에 이미지 등 유연한 콘텐츠 삽입이 가능해졌으며, 이미지 비율이 유지됩니다.
    • 감상평, 문장 등록 화면의 버튼 모서리와 레이아웃이 동적으로 조정되어 더욱 자연스러운 UI를 제공합니다.
    • 노트 작성 완료 후 즉시 화면이 닫히지 않고, 완료 안내 후 원하는 경우 기록 화면으로 이동할 수 있습니다.
  • 버그 수정/스타일

    • 일부 레이아웃 및 오토레이아웃 제약 조건이 개선되어 화면이 더 안정적으로 표시됩니다.
  • 리팩터

    • 검색 결과 셀 구조가 단순화되어 코드 유지보수가 용이해졌습니다.
  • 기타

    • 외부 이미지 로딩을 위해 Kingfisher 라이브러리가 추가되었습니다.

@clxxrlove clxxrlove marked this pull request as draft July 28, 2025 15:15
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Jul 28, 2025

"""

Walkthrough

이 PR은 독서 기록 완료 후 안내 다이얼로그를 표시하고, 기록 확인 화면을 구현합니다. 이를 위해 다이얼로그 컴포넌트의 이미지 삽입 및 커스텀 콘텐츠 기능이 추가되고, NoteCompletion 관련 뷰와 뷰컨트롤러가 새로 도입되었습니다. 또한, 관련 레이아웃 및 연결 로직이 반영되었습니다.

Changes

Cohort / File(s) Change Summary
Dialog 개선 및 이미지 삽입 기능
src/Projects/BKDesign/Sources/Components/Dialog/BKDialog.swift, src/Projects/BKDesign/PreviewApp/Sources/View/BKDialogTestViewController.swift
다이얼로그에 이미지 등 커스텀 콘텐츠 삽입을 지원하는 suppliedContentStyle 기능 추가 및 레이아웃 개선, 테스트 뷰컨트롤러에 이미지 다이얼로그 버튼/액션 추가
Note 기록 완료 및 확인 플로우 구현
src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteViewController.swift, src/Projects/BKPresentation/Sources/MainFlow/Note/Coordinator/NoteCoordinator.swift
기록 완료 시 다이얼로그를 띄우고, 확인 버튼 클릭 시 NoteCompletionViewController를 모달로 표시하는 로직 추가 및 delegate → coordinator로 참조 변경
NoteCompletion 화면 신규 도입
src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/NoteCompletionView.swift, src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/NoteCompletionViewController.swift, src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/CollectedSentenceView.swift, src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/AppreciationResultView.swift
기록 확인 화면을 위한 신규 뷰/뷰컨트롤러 및 하위 컴포넌트(감상평, 수집문장 등) 추가
BookSummaryView 도입 및 활용
src/Projects/BKDesign/Sources/Components/Summary/BKBookSummaryView.swift, src/Projects/BKPresentation/Sources/MainFlow/Search/View/SearchResultCell.swift
책 요약 정보를 보여주는 BKBookSummaryView 신규 도입 및 SearchResultCell에 적용
의존성 및 기타 UI/레이아웃 개선
src/Projects/BKDesign/Project.swift, src/Projects/BKDesign/Sources/Components/BottomSheet/BKBottomSheetViewController.swift, src/Projects/BKPresentation/Sources/MainFlow/Note/View/EmotionRegistrationView.swift, src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteView.swift, src/Projects/BKPresentation/Sources/MainFlow/Note/View/SentenceAppreciationView.swift, src/Projects/BKPresentation/Sources/MainFlow/Note/View/SentenceRegistrationView.swift
Kingfisher 의존성 추가, 일부 레이아웃 및 UI 코드 리팩토링, 스크롤뷰 및 버튼 코너 반응형 처리 등

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant NoteViewController
    participant BKDialogViewController
    participant NoteCoordinator
    participant NoteCompletionViewController

    User->>NoteViewController: 독서 기록 완료 액션
    NoteViewController->>BKDialogViewController: 완료 다이얼로그 present
    User->>BKDialogViewController: '기록 보러가기' 버튼 선택
    BKDialogViewController->>NoteViewController: dismiss & delegate 호출
    NoteViewController->>NoteCoordinator: didCompleteNoteCreation()
    NoteCoordinator->>NoteCompletionViewController: 모달 present
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~40 minutes

Assessment against linked issues

Objective Addressed Explanation
독서 기록 완료 시 안내 Dialog 추가 (#113)
기록 확인 화면 구현 (#113)

Assessment against linked issues: Out-of-scope changes

해당 이슈(#113) 목적과 직접적으로 관련 없는 기능적 변경사항은 발견되지 않았습니다.

Possibly related PRs

Suggested reviewers

  • doyeonk429
    """

Note

⚡️ Unit Test Generation is now available in beta!

Learn more here, or try it out under "Finishing Touches" below.


📜 Recent review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 90410a2 and 03ae805.

📒 Files selected for processing (1)
  • src/Projects/BKPresentation/Sources/MainFlow/Note/Coordinator/NoteCoordinator.swift (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/Projects/BKPresentation/Sources/MainFlow/Note/Coordinator/NoteCoordinator.swift
✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch BOOK-182-feature/#113

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary or @coderabbitai 요약 to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@clxxrlove clxxrlove marked this pull request as ready for review July 29, 2025 05:41
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/CollectedSentenceView.swift (1)

47-70: 레이아웃 제약 조건 설정을 개선해주세요.

대부분의 제약 조건이 적절하지만, pageLabel의 너비 제약 조건이 불필요할 수 있습니다:

-pageLabel.snp.makeConstraints {
-    $0.width.equalToSuperview()
-}

스택뷰의 alignment = .center 설정과 함께 이미 적절한 레이아웃이 구성되므로, 명시적인 너비 제약 조건이 필요하지 않을 수 있습니다.

src/Projects/BKDesign/Sources/Components/Summary/BKBookSummaryView.swift (1)

18-23: 외부 플레이스홀더 이미지 URL 사용 검토

하드코딩된 외부 URL을 플레이스홀더로 사용하고 있습니다. 네트워크 연결이 없거나 해당 서비스에 문제가 생길 경우를 고려해보세요.

번들 내 기본 이미지를 대안으로 제공하는 것을 고려해보세요:

 var placeholderImage: URL? {
     switch self {
-    case .regular: return URL(string: "https://dummyimage.com/68x100/2f9647/ffffff")
-    case .compact: return URL(string: "https://dummyimage.com/46x68/2f9647/ffffff")
+    case .regular: return Bundle.main.url(forResource: "book-placeholder-regular", withExtension: "png")
+    case .compact: return Bundle.main.url(forResource: "book-placeholder-compact", withExtension: "png")
     }
 }
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 82fc234 and 1a362fa.

📒 Files selected for processing (16)
  • src/Projects/BKDesign/PreviewApp/Sources/View/BKDialogTestViewController.swift (4 hunks)
  • src/Projects/BKDesign/Project.swift (1 hunks)
  • src/Projects/BKDesign/Sources/Components/BottomSheet/BKBottomSheetViewController.swift (1 hunks)
  • src/Projects/BKDesign/Sources/Components/Dialog/BKDialog.swift (5 hunks)
  • src/Projects/BKDesign/Sources/Components/Summary/BKBookSummaryView.swift (1 hunks)
  • src/Projects/BKPresentation/Sources/MainFlow/Note/Coordinator/NoteCoordinator.swift (1 hunks)
  • src/Projects/BKPresentation/Sources/MainFlow/Note/View/EmotionRegistrationView.swift (1 hunks)
  • src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteView.swift (2 hunks)
  • src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteViewController.swift (3 hunks)
  • src/Projects/BKPresentation/Sources/MainFlow/Note/View/SentenceAppreciationView.swift (2 hunks)
  • src/Projects/BKPresentation/Sources/MainFlow/Note/View/SentenceRegistrationView.swift (2 hunks)
  • src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/AppreciationResultView.swift (1 hunks)
  • src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/CollectedSentenceView.swift (1 hunks)
  • src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/NoteCompletionView.swift (1 hunks)
  • src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/NoteCompletionViewController.swift (1 hunks)
  • src/Projects/BKPresentation/Sources/MainFlow/Search/View/SearchResultCell.swift (1 hunks)
🧰 Additional context used
🧠 Learnings (14)
📓 Common learnings
Learnt from: clxxrlove
PR: YAPP-Github/Reed-iOS#94
File: src/Projects/BKData/Sources/Repository/DefaultBookRepository.swift:15-40
Timestamp: 2025-07-21T05:16:18.481Z
Learning: clxxrlove는 Reed-iOS 프로젝트에서 기능 구현 시 우선순위를 명확하게 설정한다. 기본 기능 구현을 먼저 완료하고, 에러 처리나 안정성 개선은 이후 단계에서 진행하는 것을 선호한다.
Learnt from: clxxrlove
PR: YAPP-Github/Reed-iOS#112
File: src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteView.swift:128-140
Timestamp: 2025-07-28T10:45:09.696Z
Learning: clxxrlove는 NoteView의 nextButtonTapped 메서드에서 폼 검증 실패 시 첫 번째 페이지로 되돌아가는 로직을 임시로 구현했으며, 추후 적절한 에러 처리 로직을 추가할 예정이라고 명시했다. 임시 화면 구현 단계에서는 기본 동작에 집중하고 에러 처리는 후속 작업으로 계획하는 것을 선호한다.
Learnt from: clxxrlove
PR: YAPP-Github/Reed-iOS#56
File: src/Projects/BKPresentation/Sources/Constant/PresentationKeys.swift:3-5
Timestamp: 2025-07-07T13:53:13.006Z
Learning: clxxrlove prefers using enum over struct for constants namespace due to better runtime performance, memory layout, and compiler optimizations. Enum prevents instantiation at compile time without needing private init().
src/Projects/BKPresentation/Sources/MainFlow/Note/View/EmotionRegistrationView.swift (1)

Learnt from: clxxrlove
PR: #112
File: src/Projects/BKPresentation/Sources/MainFlow/Note/View/EmotionRegistrationView.swift:52-53
Timestamp: 2025-07-28T10:44:32.256Z
Learning: clxxrlove는 EmotionRegistrationView에서 someEmotion1-4 케이스들을 임시로 구현했으며, 해당하는 그래픽 디자인이 나온 후 수정할 예정이라고 명시했다. 감정 선택 UI는 디자인 에셋 완성 후 구현하는 것을 선호한다.

src/Projects/BKDesign/Sources/Components/BottomSheet/BKBottomSheetViewController.swift (2)

Learnt from: doyeonk429
PR: #63
File: src/Projects/BKDesign/Sources/Foundation/GraphicSystem/BottomSheetShadow.swift:5-10
Timestamp: 2025-07-08T17:16:15.942Z
Learning: doyeonk429는 BottomSheetShadow struct에서 apply(to:)와 asCALayerShadow() 메서드를 처음에 만들었지만 활용 측면에서 애매할 것 같아서 제외했다고 함. 정적 속성만으로 구현하는 것을 선호함.

Learnt from: clxxrlove
PR: #80
File: src/Projects/BKDesign/Sources/Components/BottomSheet/BKBottomSheetViewController.swift:148-148
Timestamp: 2025-07-14T05:23:04.937Z
Learning: Reed-iOS 프로젝트의 BKBottomSheetViewController에서 버튼 영역 높이(84)는 디자인 시스템에 기반한 의도적인 고정값입니다. clxxrlove에 따르면 작은 기기에서도 동일한 크기가 유지되어야 하며, 동적 계산보다는 상수화만 필요합니다.

src/Projects/BKDesign/PreviewApp/Sources/View/BKDialogTestViewController.swift (1)

Learnt from: doyeonk429
PR: #68
File: src/Projects/BKDesign/Sources/Components/Button/BKButtonGroup.swift:86-92
Timestamp: 2025-07-10T08:21:16.126Z
Learning: BKButtonGroup의 horizontal 레이아웃에서 stackView.distribution을 .fillProportionally로 설정한 것은 의도된 디자인입니다. doyeonk429는 버튼들이 콘텐츠 길이에 따라 다른 너비를 가지는 것을 선호합니다.

src/Projects/BKDesign/Project.swift (1)

Learnt from: doyeonk429
PR: #63
File: src/Projects/BKDesign/Resources/Assets.xcassets/chevron-right.imageset/Contents.json:1-26
Timestamp: 2025-07-08T17:15:59.793Z
Learning: In the BKDesign project, all image assets referenced in Contents.json files are properly included in the repository with the correct 1x, 2x, and 3x variants. The chevron-right icon and other design system icons are complete and ready for use.

src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteViewController.swift (1)

Learnt from: clxxrlove
PR: #112
File: src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteView.swift:128-140
Timestamp: 2025-07-28T10:45:09.696Z
Learning: clxxrlove는 NoteView의 nextButtonTapped 메서드에서 폼 검증 실패 시 첫 번째 페이지로 되돌아가는 로직을 임시로 구현했으며, 추후 적절한 에러 처리 로직을 추가할 예정이라고 명시했다. 임시 화면 구현 단계에서는 기본 동작에 집중하고 에러 처리는 후속 작업으로 계획하는 것을 선호한다.

src/Projects/BKPresentation/Sources/MainFlow/Note/View/SentenceAppreciationView.swift (4)

Learnt from: doyeonk429
PR: #63
File: src/Projects/BKDesign/Sources/Foundation/GraphicSystem/BottomSheetShadow.swift:5-10
Timestamp: 2025-07-08T17:16:15.942Z
Learning: doyeonk429는 BottomSheetShadow struct에서 apply(to:)와 asCALayerShadow() 메서드를 처음에 만들었지만 활용 측면에서 애매할 것 같아서 제외했다고 함. 정적 속성만으로 구현하는 것을 선호함.

Learnt from: doyeonk429
PR: #68
File: src/Projects/BKDesign/Sources/Components/Button/BKButtonGroup.swift:86-92
Timestamp: 2025-07-10T08:21:16.126Z
Learning: BKButtonGroup의 horizontal 레이아웃에서 stackView.distribution을 .fillProportionally로 설정한 것은 의도된 디자인입니다. doyeonk429는 버튼들이 콘텐츠 길이에 따라 다른 너비를 가지는 것을 선호합니다.

Learnt from: doyeonk429
PR: #105
File: src/Projects/BKPresentation/Sources/TabBarFlow/BottomTabBarController.swift:24-30
Timestamp: 2025-07-24T13:00:59.096Z
Learning: doyeonk429는 BottomTabBarController에서 viewDidLayoutSubviews의 레이어 재생성 방식을 유지하기를 선호합니다. 탭바에서는 레이아웃 변경 케이스가 거의 없기 때문에 성능 최적화보다는 현재의 단순한 구현 방식이 더 적합하다고 판단합니다.

Learnt from: clxxrlove
PR: #80
File: src/Projects/BKDesign/Sources/Components/BottomSheet/BKBottomSheetViewController.swift:148-148
Timestamp: 2025-07-14T05:23:04.937Z
Learning: Reed-iOS 프로젝트의 BKBottomSheetViewController에서 버튼 영역 높이(84)는 디자인 시스템에 기반한 의도적인 고정값입니다. clxxrlove에 따르면 작은 기기에서도 동일한 크기가 유지되어야 하며, 동적 계산보다는 상수화만 필요합니다.

src/Projects/BKPresentation/Sources/MainFlow/Note/View/SentenceRegistrationView.swift (3)

Learnt from: doyeonk429
PR: #105
File: src/Projects/BKPresentation/Sources/TabBarFlow/BottomTabBarController.swift:24-30
Timestamp: 2025-07-24T13:00:59.096Z
Learning: doyeonk429는 BottomTabBarController에서 viewDidLayoutSubviews의 레이어 재생성 방식을 유지하기를 선호합니다. 탭바에서는 레이아웃 변경 케이스가 거의 없기 때문에 성능 최적화보다는 현재의 단순한 구현 방식이 더 적합하다고 판단합니다.

Learnt from: clxxrlove
PR: #80
File: src/Projects/BKDesign/Sources/Components/BottomSheet/BKBottomSheetViewController.swift:148-148
Timestamp: 2025-07-14T05:23:04.937Z
Learning: Reed-iOS 프로젝트의 BKBottomSheetViewController에서 버튼 영역 높이(84)는 디자인 시스템에 기반한 의도적인 고정값입니다. clxxrlove에 따르면 작은 기기에서도 동일한 크기가 유지되어야 하며, 동적 계산보다는 상수화만 필요합니다.

Learnt from: doyeonk429
PR: #68
File: src/Projects/BKDesign/Sources/Components/Button/BKButtonGroup.swift:86-92
Timestamp: 2025-07-10T08:21:16.126Z
Learning: BKButtonGroup의 horizontal 레이아웃에서 stackView.distribution을 .fillProportionally로 설정한 것은 의도된 디자인입니다. doyeonk429는 버튼들이 콘텐츠 길이에 따라 다른 너비를 가지는 것을 선호합니다.

src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteView.swift (3)

Learnt from: clxxrlove
PR: #112
File: src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteView.swift:128-140
Timestamp: 2025-07-28T10:45:09.696Z
Learning: clxxrlove는 NoteView의 nextButtonTapped 메서드에서 폼 검증 실패 시 첫 번째 페이지로 되돌아가는 로직을 임시로 구현했으며, 추후 적절한 에러 처리 로직을 추가할 예정이라고 명시했다. 임시 화면 구현 단계에서는 기본 동작에 집중하고 에러 처리는 후속 작업으로 계획하는 것을 선호한다.

Learnt from: clxxrlove
PR: #56
File: src/Projects/BKPresentation/Sources/AuthFlow/ViewModel/LoginViewModel.swift:109-111
Timestamp: 2025-07-07T13:47:32.784Z
Learning: The LoginViewModel's authenticateWithToken case in src/Projects/BKPresentation/Sources/AuthFlow/ViewModel/LoginViewModel.swift is test code and not important for implementation according to the user.

Learnt from: doyeonk429
PR: #105
File: src/Projects/BKPresentation/Sources/TabBarFlow/BottomTabBarController.swift:24-30
Timestamp: 2025-07-24T13:00:59.096Z
Learning: doyeonk429는 BottomTabBarController에서 viewDidLayoutSubviews의 레이어 재생성 방식을 유지하기를 선호합니다. 탭바에서는 레이아웃 변경 케이스가 거의 없기 때문에 성능 최적화보다는 현재의 단순한 구현 방식이 더 적합하다고 판단합니다.

src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/NoteCompletionViewController.swift (3)

Learnt from: clxxrlove
PR: #112
File: src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteView.swift:128-140
Timestamp: 2025-07-28T10:45:09.696Z
Learning: clxxrlove는 NoteView의 nextButtonTapped 메서드에서 폼 검증 실패 시 첫 번째 페이지로 되돌아가는 로직을 임시로 구현했으며, 추후 적절한 에러 처리 로직을 추가할 예정이라고 명시했다. 임시 화면 구현 단계에서는 기본 동작에 집중하고 에러 처리는 후속 작업으로 계획하는 것을 선호한다.

Learnt from: doyeonk429
PR: #105
File: src/Projects/BKPresentation/Sources/TabBarFlow/BottomTabBarController.swift:24-30
Timestamp: 2025-07-24T13:00:59.096Z
Learning: doyeonk429는 BottomTabBarController에서 viewDidLayoutSubviews의 레이어 재생성 방식을 유지하기를 선호합니다. 탭바에서는 레이아웃 변경 케이스가 거의 없기 때문에 성능 최적화보다는 현재의 단순한 구현 방식이 더 적합하다고 판단합니다.

Learnt from: clxxrlove
PR: #80
File: src/Projects/BKDesign/Sources/Components/BottomSheet/BKBottomSheetViewController.swift:148-148
Timestamp: 2025-07-14T05:23:04.937Z
Learning: Reed-iOS 프로젝트의 BKBottomSheetViewController에서 버튼 영역 높이(84)는 디자인 시스템에 기반한 의도적인 고정값입니다. clxxrlove에 따르면 작은 기기에서도 동일한 크기가 유지되어야 하며, 동적 계산보다는 상수화만 필요합니다.

src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/AppreciationResultView.swift (2)

Learnt from: clxxrlove
PR: #112
File: src/Projects/BKPresentation/Sources/MainFlow/Note/View/EmotionRegistrationView.swift:52-53
Timestamp: 2025-07-28T10:44:32.256Z
Learning: clxxrlove는 EmotionRegistrationView에서 someEmotion1-4 케이스들을 임시로 구현했으며, 해당하는 그래픽 디자인이 나온 후 수정할 예정이라고 명시했다. 감정 선택 UI는 디자인 에셋 완성 후 구현하는 것을 선호한다.

Learnt from: clxxrlove
PR: #80
File: src/Projects/BKDesign/Sources/Components/BottomSheet/BKBottomSheetViewController.swift:148-148
Timestamp: 2025-07-14T05:23:04.937Z
Learning: Reed-iOS 프로젝트의 BKBottomSheetViewController에서 버튼 영역 높이(84)는 디자인 시스템에 기반한 의도적인 고정값입니다. clxxrlove에 따르면 작은 기기에서도 동일한 크기가 유지되어야 하며, 동적 계산보다는 상수화만 필요합니다.

src/Projects/BKDesign/Sources/Components/Dialog/BKDialog.swift (3)

Learnt from: doyeonk429
PR: #68
File: src/Projects/BKDesign/Sources/Components/Button/BKButtonGroup.swift:86-92
Timestamp: 2025-07-10T08:21:16.126Z
Learning: BKButtonGroup의 horizontal 레이아웃에서 stackView.distribution을 .fillProportionally로 설정한 것은 의도된 디자인입니다. doyeonk429는 버튼들이 콘텐츠 길이에 따라 다른 너비를 가지는 것을 선호합니다.

Learnt from: doyeonk429
PR: #63
File: src/Projects/BKDesign/Sources/Foundation/GraphicSystem/BottomSheetShadow.swift:5-10
Timestamp: 2025-07-08T17:16:15.942Z
Learning: doyeonk429는 BottomSheetShadow struct에서 apply(to:)와 asCALayerShadow() 메서드를 처음에 만들었지만 활용 측면에서 애매할 것 같아서 제외했다고 함. 정적 속성만으로 구현하는 것을 선호함.

Learnt from: clxxrlove
PR: #80
File: src/Projects/BKDesign/Sources/Components/BottomSheet/BKBottomSheetViewController.swift:148-148
Timestamp: 2025-07-14T05:23:04.937Z
Learning: Reed-iOS 프로젝트의 BKBottomSheetViewController에서 버튼 영역 높이(84)는 디자인 시스템에 기반한 의도적인 고정값입니다. clxxrlove에 따르면 작은 기기에서도 동일한 크기가 유지되어야 하며, 동적 계산보다는 상수화만 필요합니다.

src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/NoteCompletionView.swift (3)

Learnt from: clxxrlove
PR: #112
File: src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteView.swift:128-140
Timestamp: 2025-07-28T10:45:09.696Z
Learning: clxxrlove는 NoteView의 nextButtonTapped 메서드에서 폼 검증 실패 시 첫 번째 페이지로 되돌아가는 로직을 임시로 구현했으며, 추후 적절한 에러 처리 로직을 추가할 예정이라고 명시했다. 임시 화면 구현 단계에서는 기본 동작에 집중하고 에러 처리는 후속 작업으로 계획하는 것을 선호한다.

Learnt from: clxxrlove
PR: #80
File: src/Projects/BKDesign/Sources/Components/BottomSheet/BKBottomSheetViewController.swift:148-148
Timestamp: 2025-07-14T05:23:04.937Z
Learning: Reed-iOS 프로젝트의 BKBottomSheetViewController에서 버튼 영역 높이(84)는 디자인 시스템에 기반한 의도적인 고정값입니다. clxxrlove에 따르면 작은 기기에서도 동일한 크기가 유지되어야 하며, 동적 계산보다는 상수화만 필요합니다.

Learnt from: doyeonk429
PR: #63
File: src/Projects/BKDesign/Sources/Foundation/GraphicSystem/BottomSheetShadow.swift:5-10
Timestamp: 2025-07-08T17:16:15.942Z
Learning: doyeonk429는 BottomSheetShadow struct에서 apply(to:)와 asCALayerShadow() 메서드를 처음에 만들었지만 활용 측면에서 애매할 것 같아서 제외했다고 함. 정적 속성만으로 구현하는 것을 선호함.

src/Projects/BKDesign/Sources/Components/Summary/BKBookSummaryView.swift (4)

Learnt from: clxxrlove
PR: #80
File: src/Projects/BKDesign/Sources/Components/BottomSheet/BKBottomSheetViewController.swift:148-148
Timestamp: 2025-07-14T05:23:04.937Z
Learning: Reed-iOS 프로젝트의 BKBottomSheetViewController에서 버튼 영역 높이(84)는 디자인 시스템에 기반한 의도적인 고정값입니다. clxxrlove에 따르면 작은 기기에서도 동일한 크기가 유지되어야 하며, 동적 계산보다는 상수화만 필요합니다.

Learnt from: doyeonk429
PR: #68
File: src/Projects/BKDesign/Sources/Components/Button/BKButtonGroup.swift:86-92
Timestamp: 2025-07-10T08:21:16.126Z
Learning: BKButtonGroup의 horizontal 레이아웃에서 stackView.distribution을 .fillProportionally로 설정한 것은 의도된 디자인입니다. doyeonk429는 버튼들이 콘텐츠 길이에 따라 다른 너비를 가지는 것을 선호합니다.

Learnt from: doyeonk429
PR: #63
File: src/Projects/BKDesign/Sources/Extensions/UIColor+.swift:50-92
Timestamp: 2025-07-08T17:17:37.703Z
Learning: BKDesign 프로젝트에서 UIColor+ 확장의 시맨틱 컬러 메서드들(.bkContentColor, .bkBorderColor, .bkDividerColor, .bkBaseColor)이 현재 다크 모드에서도 라이트 모드 색상을 반환하는 것은 의도적인 구현입니다. 아직 다크 모드가 구현되지 않았지만, 미래의 다크 모드 지원을 위한 코드 구조로 준비되어 있습니다.

Learnt from: doyeonk429
PR: #63
File: src/Projects/BKDesign/Sources/Foundation/GraphicSystem/BottomSheetShadow.swift:5-10
Timestamp: 2025-07-08T17:16:15.942Z
Learning: doyeonk429는 BottomSheetShadow struct에서 apply(to:)와 asCALayerShadow() 메서드를 처음에 만들었지만 활용 측면에서 애매할 것 같아서 제외했다고 함. 정적 속성만으로 구현하는 것을 선호함.

🧬 Code Graph Analysis (5)
src/Projects/BKDesign/Project.swift (1)
src/Tuist/ProjectDescriptionHelpers/TargetDependency+External.swift (1)
  • external (26-28)
src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteViewController.swift (1)
src/Projects/BKPresentation/Sources/MainFlow/Note/Coordinator/NoteCoordinator.swift (1)
  • didCompleteNoteCreation (26-31)
src/Projects/BKPresentation/Sources/MainFlow/Note/View/SentenceAppreciationView.swift (5)
src/Projects/BKPresentation/Sources/MainFlow/Note/View/SentenceRegistrationView.swift (2)
  • layoutSubviews (54-59)
  • setupView (61-68)
src/Projects/BKDesign/Sources/Components/Button/BKButtonSize.swift (1)
  • cornerRadius (111-120)
src/Projects/BKPresentation/Sources/MainFlow/Note/View/EmotionRegistrationView.swift (1)
  • setupView (68-73)
src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteView.swift (1)
  • setupView (39-43)
src/Projects/BKDesign/Sources/Extensions/UIView+.swift (1)
  • addSubviews (7-9)
src/Projects/BKPresentation/Sources/MainFlow/Note/View/SentenceRegistrationView.swift (5)
src/Projects/BKPresentation/Sources/MainFlow/Note/View/SentenceAppreciationView.swift (2)
  • layoutSubviews (58-62)
  • setupView (64-67)
src/Projects/BKDesign/Sources/Components/Button/BKButtonSize.swift (1)
  • cornerRadius (111-120)
src/Projects/BKPresentation/Sources/MainFlow/Note/View/EmotionRegistrationView.swift (1)
  • setupView (68-73)
src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteView.swift (1)
  • setupView (39-43)
src/Projects/BKDesign/Sources/Extensions/UIView+.swift (1)
  • addSubviews (7-9)
src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/NoteCompletionView.swift (1)
src/Projects/BKDesign/Sources/Extensions/UIView+.swift (1)
  • addSubviews (7-9)
🪛 SwiftLint (0.57.0)
src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteView.swift

[Warning] 114-114: TODOs should be resolved (- 기능 연결 이후 수정)

(todo)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (41)
src/Projects/BKPresentation/Sources/MainFlow/Note/View/EmotionRegistrationView.swift (1)

77-77: 레이아웃 제약조건 개선 승인

containerView의 제약조건을 edges.equalToSuperview()로 변경한 것은 적절한 개선입니다. 이전에는 bottom 제약이 없어 레이아웃이 불완전했을 수 있는데, 이제 컨테이너가 슈퍼뷰 전체 영역을 정확히 차지하게 되어 레이아웃 안정성이 향상됩니다.

src/Projects/BKDesign/Project.swift (1)

18-19: Kingfisher 의존성 추가가 적절합니다.

이미지 로딩 및 캐싱을 위한 Kingfisher 라이브러리 추가가 새로운 UI 컴포넌트들을 지원하는데 적합합니다.

src/Projects/BKDesign/Sources/Components/Dialog/BKDialog.swift (3)

26-28: 추가된 콘텐츠 스타일 프로퍼티가 잘 구현되었습니다.

다이얼로그에 이미지나 커스텀 뷰를 추가할 수 있는 유연한 구조입니다.


156-170: 이미지 비율 계산 로직이 적절합니다.

UIImageView의 이미지 비율을 추출하고 적절한 contentMode를 설정하는 로직이 잘 구현되었습니다.


188-189: 레이아웃 상수 추가가 좋습니다.

하드코딩된 값 대신 명명된 상수를 사용하여 유지보수성이 향상되었습니다.

src/Projects/BKDesign/Sources/Components/BottomSheet/BKBottomSheetViewController.swift (1)

116-117: 클로저 타입 포맷팅이 개선되었습니다.

Swift 스타일 가이드에 맞게 공백이 추가되었습니다.

src/Projects/BKPresentation/Sources/MainFlow/Note/Coordinator/NoteCoordinator.swift (2)

20-20: Coordinator 패턴 적용이 적절합니다.

Delegate 대신 Coordinator를 사용하여 네비게이션 로직이 더 명확해졌습니다.


26-31: 노트 작성 완료 화면 전환이 잘 구현되었습니다.

fullScreen 모달 프레젠테이션을 사용한 것이 완료 화면의 중요성을 강조하는데 적합합니다.

src/Projects/BKPresentation/Sources/MainFlow/Note/View/SentenceAppreciationView.swift (3)

58-62: 동적 corner radius 설정이 개선되었습니다.

layoutSubviews에서 버튼 높이에 따라 corner radius를 설정하여 다양한 화면 크기에서도 일관된 모양을 유지합니다.


65-65: 뷰 계층 구조가 단순화되었습니다.

containerView를 제거하고 직접 서브뷰를 추가하여 불필요한 중첩을 줄였습니다.


76-77: 제약조건 설정이 명시적으로 개선되었습니다.

horizontalEdges 대신 leading/trailing을 사용하여 더 명확한 의도를 표현합니다.

Also applies to: 83-84

src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/NoteCompletionViewController.swift (3)

6-12: 클래스 구조와 네비게이션 설정이 적절합니다.

BaseViewController<NoteCompletionView>를 상속하고 네비게이션 바 스타일과 타이틀을 올바르게 설정했습니다.


33-35: dismiss 액션 구현이 적절합니다.

모달 프레젠테이션에 맞는 dismiss(animated: true) 사용이 올바릅니다.


14-26: interactivePopGestureRecognizer 비활성화 로직 검토 결과

  • NoteViewControllerNoteCompletionViewController 모두 동일하게
    navigationController?.interactivePopGestureRecognizer?.isEnabled = false를 적용하고 있어 패턴이 일관적입니다.
  • optional chaining(?.)으로 네비게이션 컨트롤러가 없을 경우 아무 동작도 하지 않으므로 안전합니다.
  • 모달 프레젠테이션에서는 실제로 스와이프 팝 제스처가 동작하지 않아 비활성화 로직이 무해하며, UI 일관성 차원에서도 유지해도 무방합니다.

따라서 별도의 네비게이션 컨트롤러 존재 여부 확인 로직 추가나 interactivePopGestureRecognizer 비활성화 제거는 필요하지 않습니다.

src/Projects/BKPresentation/Sources/MainFlow/Note/View/SentenceRegistrationView.swift (3)

54-59: 동적 코너 반경 설정이 적절합니다.

layoutSubviews에서 버튼 높이에 따른 동적 코너 반경 설정은 다른 뷰(SentenceAppreciationView.swift)와 일관된 패턴입니다. masksToBoundsclipsToBounds 모두 설정한 것도 올바릅니다.


62-67: 서브뷰 추가 방식이 개선되었습니다.

addSubviews 확장 메서드를 사용한 직접적인 서브뷰 추가는 더 간결하고 명확합니다.


84-84: 제약 조건 명시적 설정이 좋습니다.

horizontalEdges에서 명시적인 leading.trailing로의 변경은 더 명확한 의도를 나타냅니다.

Also applies to: 91-91

src/Projects/BKDesign/PreviewApp/Sources/View/BKDialogTestViewController.swift (2)

20-24: 테스트 버튼 추가가 적절합니다.

이미지가 포함된 다이얼로그 테스트를 위한 버튼 구현이 올바릅니다.


102-117: 새로운 다이얼로그 기능 테스트 구현이 우수합니다.

suppliedContentStyle을 사용한 이미지 포함 다이얼로그 테스트가 잘 구현되었습니다. 마스코트 이미지를 상단에 배치하는 것이 사용자 경험에 적절합니다.

src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteViewController.swift (3)

12-12: Coordinator 패턴으로의 전환이 적절합니다.

delegate에서 coordinator로의 변경은 더 나은 아키텍처 패턴입니다.


56-56: 사용자 경험 개선을 위한 다이얼로그 도입이 우수합니다.

즉시 네비게이션 팝 대신 확인 다이얼로그를 표시하는 것은 더 나은 UX를 제공합니다.


72-93: 다이얼로그 구현에서 메모리 누수 방지가 잘 되었습니다.

클로저에서 [weak self] 사용으로 retain cycle을 방지했습니다. 두 버튼의 액션이 적절히 구분되어 있습니다:

  • 닫기: 다이얼로그 해제 후 뷰컨트롤러 팝
  • 기록 보러가기: 다이얼로그 해제 후 coordinator를 통한 새 화면 전환
src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/CollectedSentenceView.swift (4)

7-33: UI 컴포넌트 구조가 잘 설계되었습니다.

뷰 계층 구조와 스택뷰 설정이 적절합니다. 레이블 설정과 스타일링도 일관성 있게 구현되었습니다.


34-39: 뷰 설정 메서드가 올바릅니다.

서브뷰 추가 순서와 계층 구조가 논리적으로 구성되었습니다.


72-78: 데이터 적용 메서드가 깔끔합니다.

문장과 페이지 정보를 받아서 레이블에 적용하는 로직이 간단하고 명확합니다.


81-88: 레이아웃 상수 정의가 체계적입니다.

BK 디자인 시스템의 상수들을 일관성 있게 사용했습니다.

src/Projects/BKPresentation/Sources/MainFlow/Note/View/NoteView.swift (3)

85-87: 레이아웃 설정 순서 개선이 적절합니다.

makeInnerViews() 호출을 setupLayout() 마지막으로 이동한 것은 제약 조건 설정 후 뷰 구성을 완료하는 올바른 순서입니다.


94-110: 스크롤뷰 레이아웃 구조 개선이 좋습니다.

중간 컨테이너 뷰를 제거하고 직접 pageView를 스크롤뷰에 추가하는 방식으로 뷰 계층을 단순화했습니다. 제약 조건과 우선순위 설정도 적절합니다.


114-120: 임시 구현 확인 완료 – 폼 수집 로직 준비됨

createFormData()가 현재 플레이스홀더를 반환하고 있으나, 아래 서브뷰들이 모두 RegistrationFormProvidable을 구현하고 있어 실제 데이터 수집 로직 활성화만 남아 있습니다.

  • SentenceRegistrationView: registrationForm() 구현
  • EmotionRegistrationView: registrationForm() 구현
  • SentenceAppreciationView: registrationForm() 구현

추후 createFormData()에서 주석 처리된 부분을 풀고
.makeNoteForm(from: forms) 호출로 전환하면 정상 동작할 것으로 보입니다.
현 단계에서는 뼈대 우선 구현 후 세부 로직 추가라는 선호사항에도 부합하므로 이 부분은 승인 처리하겠습니다.

src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/NoteCompletionView.swift (3)

7-26: 잘 구조화된 UI 컴포넌트입니다.

BaseView를 상속하고 적절한 하위 뷰들을 구성했습니다. BKBookSummaryView의 재사용과 일관된 스택뷰 구성이 좋습니다.


28-47: 플레이스홀더 데이터 임시 구현 확인

현재 하드코딩된 플레이스홀더 데이터를 사용하고 있습니다. 주석으로 임시 데이터임을 명시한 것이 좋습니다.


49-81: 제약 조건 설정이 적절합니다.

SnapKit을 사용한 오토레이아웃 구성이 깔끔하고, 디자인 시스템의 상수들을 활용한 것이 일관성 있습니다.

src/Projects/BKPresentation/Sources/MainFlow/Search/View/SearchResultCell.swift (2)

14-31: 컴포넌트 재사용으로 인한 훌륭한 리팩토링입니다.

개별 UI 요소들을 BKBookSummaryView로 교체하여 코드가 훨씬 깔끔해졌습니다. 제약 조건도 단순화되어 유지보수성이 향상되었습니다.


37-53: 셀 재사용 및 구성 로직이 개선되었습니다.

prepareForReuse()에서 clearView() 호출과 configure 메서드에서 BKBookSummaryView로의 위임이 적절합니다. 공개 인터페이스를 유지하면서 구현을 단순화한 좋은 예시입니다.

src/Projects/BKPresentation/Sources/MainFlow/NoteCompletion/View/AppreciationResultView.swift (3)

7-29: 감정 아이콘 임시 구현 상태 확인

학습된 정보에 따르면 someEmotion1-4 케이스들은 그래픽 디자인 완성 후 수정 예정인 임시 구현입니다. 현재 모든 감정에 동일한 마스코트 이미지를 사용하는 것이 이를 반영합니다.


31-93: UI 컴포넌트 구성이 잘 설계되었습니다.

BaseView를 상속하고 적절한 스택뷰 구조로 감상평, 감정, 생성일을 표시하는 구성이 깔끔합니다. 디자인 시스템의 컬러와 폰트를 일관되게 사용한 것도 좋습니다.


95-150: 제약 조건과 상수 정의가 적절합니다.

SnapKit을 사용한 레이아웃 구성과 LayoutConstants enum을 통한 상수 관리가 일관된 패턴을 따르고 있습니다. 감정 아이콘 크기와 여백 설정도 적절합니다.

src/Projects/BKDesign/Sources/Components/Summary/BKBookSummaryView.swift (4)

7-24: 스타일 열거형 설계가 우수합니다.

두 가지 스타일(regular, compact)에 따른 썸네일 크기와 플레이스홀더 이미지 URL을 제공하는 구조가 깔끔합니다.


26-27: intrinsicContentSize 관련 문서화가 좋습니다.

높이가 컨텍스트에 따라 달라질 수 있다는 점을 명확히 문서화한 것이 개발자에게 도움이 됩니다.


79-102: 이미지 로딩 및 구성 로직이 적절합니다.

Kingfisher를 사용한 비동기 이미지 로딩과 라벨 설정이 잘 구현되었습니다. 썸네일의 라운드 코너 처리도 적절합니다.


140-146: 라벨 우선순위 설정이 훌륭합니다.

작성자, 구분자, 출판사 라벨의 content hugging과 compression resistance 우선순위를 적절히 설정하여 텍스트 말줄임과 레이아웃이 올바르게 동작하도록 했습니다.

@clxxrlove clxxrlove marked this pull request as draft July 29, 2025 05:47
@clxxrlove clxxrlove marked this pull request as ready for review July 29, 2025 06:00
titleStack.snp.makeConstraints {
$0.top.equalToSuperview()
$0.horizontalEdges.equalToSuperview()
$0.leading.trailing.equalToSuperview()
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P4) leading.trailing == directionalHorizontalEdges여서 directionalHorizontalEdges라고 사용해도 됩니다!(사실 길이는 거기서 거기지만...)

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

사실 레이아웃이 너무 안잡혀서 온갖짓을 다 해보다가 이래저래 해본거같아요 ...


override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.tabBarController?.tabBar.isHidden = true
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P4) tabBar나 navigationBar hidden하는 코드가 viewController 마다 반복되는데 추후에 이 부분 코드 스타일 바꿔보면 좋겠습니다(지금은 pass...)

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고민좀 해봐야겠네요

Copy link
Copy Markdown
Member

@doyeonk429 doyeonk429 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨습니다 👍

@clxxrlove clxxrlove merged commit b01fe36 into develop Jul 29, 2025
4 checks passed
@clxxrlove clxxrlove deleted the BOOK-182-feature/#113 branch July 29, 2025 15:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BOOK-182/feat] 독서 기록 완료 / 기록 확인 화면 구현

2 participants