fix(mac): widen favorites quick-access cells on Mac
즐겨찾기 빠른 실행 셀(108pt 고정)이 맥(Designed for iPad) 축소 매핑 보정을 받지 않아 그리드 버튼(200~280pt)과 비례가 안 맞고, xLarge 글자 보정과 겹치면 긴 이름이 잘릴 여지가 있었다 — 최초 구현 때 맥 레이아웃 검증(-forceMacLayout)을 빠뜨린 것. - 맥에서만 셀 폭 108→150pt (그리드 버튼 150→200과 같은 보정 비율) - 아이폰·아이패드는 기존 108pt 그대로 (런타임 분기, 무영향) - 맥 강제 레이아웃 스크린샷 검증 + progressSelfTest 37건 ALL PASS + 인텐트 스모크 10/10 + Debug/Store/워치 3스킴 빌드 + 9개 카탈로그 missing/stale 0 재확인 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014CkLDi8Lr21vGqo4SjZaTp
This commit is contained in:
parent
7d17917609
commit
bb78345882
@ -175,7 +175,7 @@ xcrun xcstringstool sync Widgets/Localizable.xcstrings --stringsdata "${widget_f
|
||||
### 6.1 모음 탭 (`MainView`)
|
||||
- 상단: 노출 목표 진행 현황 카드(1개=단독, 2개+=스냅 페이징 가로 스크롤 + 페이지 점, iPad=그리드). 카드 스타일 설정: 다짐별 각각(perQuest, 접힘 시 3개+더보기) / 전체 합산(combined)
|
||||
- "현재 진행 중" 영역: 측정 중 세션 나열 + 실시간 타이머 + 종료 버튼
|
||||
- **즐겨찾기 빠른 실행 영역**(`favoritesArea`, `runningArea` 아래·전체 그리드 위, `!favoriteActions.isEmpty && !isEditing`일 때만): `Action.isFavorite`(행동 탭과 동일 필드, §6.2) 켠 행동을 기기별 배치 순서(`orderedActions` 기준) 그대로 가로 스크롤 한 줄로 노출 — 행동이 많아져도 즐겨찾기는 스크롤 없이 바로 접근 가능하게 하는 목적(2026-07-21, 실사용 크라우딩 피드백 대응, §15 하단 이력 참고). **추가만 하고 전체 그리드에서 제외하지 않음**(즐겨찾기 아닌 행동을 찾기 더 어려워지는 트레이드오프 방지가 의도된 설계 — 그리드에서 숨기는 방식은 검토 후 기각됨). 셀은 `ActionButtonCell(compact: true)` 고정 폭(108pt) 재사용, 탭 동작(`handleTap`)과 롱프레스 메뉴(`actionContextMenu(for:)` — 기록 확인/통계 보기/기록 직접 입력·수정/**즐겨찾기 지정·해제**/행동 설정 수정/삭제)는 전체 그리드 셀과 완전히 공유. 즐겨찾기 지정·해제는 이 메뉴 또는 행동 탭에서 가능(§6.2)
|
||||
- **즐겨찾기 빠른 실행 영역**(`favoritesArea`, `runningArea` 아래·전체 그리드 위, `!favoriteActions.isEmpty && !isEditing`일 때만): `Action.isFavorite`(행동 탭과 동일 필드, §6.2) 켠 행동을 기기별 배치 순서(`orderedActions` 기준) 그대로 가로 스크롤 한 줄로 노출 — 행동이 많아져도 즐겨찾기는 스크롤 없이 바로 접근 가능하게 하는 목적(2026-07-21, 실사용 크라우딩 피드백 대응, §15 하단 이력 참고). **추가만 하고 전체 그리드에서 제외하지 않음**(즐겨찾기 아닌 행동을 찾기 더 어려워지는 트레이드오프 방지가 의도된 설계 — 그리드에서 숨기는 방식은 검토 후 기각됨). 셀은 `ActionButtonCell(compact: true)` 고정 폭(108pt, 맥은 축소 매핑 보정으로 150pt — 그리드 버튼과 같은 비율) 재사용, 탭 동작(`handleTap`)과 롱프레스 메뉴(`actionContextMenu(for:)` — 기록 확인/통계 보기/기록 직접 입력·수정/**즐겨찾기 지정·해제**/행동 설정 수정/삭제)는 전체 그리드 셀과 완전히 공유. 즐겨찾기 지정·해제는 이 메뉴 또는 행동 탭에서 가능(§6.2)
|
||||
- 행동 버튼 그리드: 꼬리표 색 그라데이션 배경 + 아이콘 + 이름 + 오늘 누적(시간형) 또는 오늘 횟수(횟수형, 숫자 전환 애니메이션). 측정 중이면 노란 테두리 + record 점. 탭 = 시작/종료 토글 또는 +1 (스프링 눌림 + 햅틱)
|
||||
- 한 줄 개수: iPhone 2~6개 설정(5개 이상은 compact 셀), iPad는 화면 폭 자동 채움 — **iPad의 목표 카드·행동 그리드는 LazyVGrid가 아니라 비-lazy `AdaptiveColumnsLayout`**(MainView 내 커스텀 Layout, LazyVGrid(.adaptive)와 같은 열 계산). lazy 높이 추정이 높이 제각각인 목표 카드 + 1초 타이머 갱신과 결합해 맨 아래 스크롤 시 화면이 무한 진동(터치 불능)하는 실기기 버그의 수정 — iPhone(고정 열·페이징 높이 고정)은 LazyVGrid 유지. iPad 모음 그리드를 다시 lazy로 되돌리지 말 것. **행동 셀 높이 통일 규칙**: 시간형·횟수형 푸터 높이가 달라(횟수형 27pt 숫자) 셀 자연 높이가 달랐음 — 푸터에 숫자 크기의 hidden 템플릿(Text "0")을 깔아 두 유형의 자연 높이를 맞추고, AdaptiveColumnsLayout.place가 LazyVGrid처럼 행 높이를 제안해 행 안 셀도 균일(측정 패스는 불변이라 진동 버그와 무관, 고정 높이 목표 카드 무영향)
|
||||
- 롱프레스 메뉴: 기록 확인(기록 탭 필터 이동) / 통계 보기 / 기록 직접 입력·수정 / **즐겨찾기 지정·해제** / 행동 설정 수정 / 삭제
|
||||
|
||||
@ -264,7 +264,8 @@ struct MainView: View {
|
||||
ActionButtonCell(action: action, isEditing: false, compact: true) {
|
||||
handleTap(action)
|
||||
}
|
||||
.frame(width: 108)
|
||||
// 맥은 축소 매핑 보정으로 폭을 키운다 — 그리드 버튼(150→200)과 같은 비율 (§6.1)
|
||||
.frame(width: DeviceLayout.isMac ? 150 : 108)
|
||||
.contextMenu {
|
||||
actionContextMenu(for: action)
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user