Commit e440434
[macOS] Fix Paper ScrollView scrollbar inset handling without localData
Replace the buggy RCTScrollContentLocalData mechanism with direct
scrollbar detection in the shadow node. RCTScrollContentShadowView now
calls +[NSScroller preferredScrollerStyle] and +scrollerWidthForControlSize:
directly in layoutWithMetrics: to detect legacy scrollbar dimensions and
apply them as trailing margin. These are class methods that read cached
system state, so they are safe to call from the shadow thread.
Key changes:
- Use marginEnd (not paddingEnd) on the content shadow view so the
documentView frame itself shrinks to match the clip view width.
Padding only shrinks children inside the content view while leaving
the documentView full-width, causing horizontal scrollbar overflow.
- Eliminate the localData round-trip through the UIManager bridge
- Observe NSPreferredScrollerStyleDidChangeNotification in RCTScrollView
to re-layout when the system scrollbar preference changes
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>1 parent 922c862 commit e440434
File tree
5 files changed
+44
-84
lines changed- packages/react-native/React/Views/ScrollView
- MacOS
5 files changed
+44
-84
lines changedLines changed: 0 additions & 27 deletions
This file was deleted.
Lines changed: 0 additions & 26 deletions
This file was deleted.
Lines changed: 36 additions & 11 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
12 | | - | |
13 | | - | |
14 | | - | |
15 | | - | |
16 | 12 | | |
17 | 13 | | |
18 | 14 | | |
19 | 15 | | |
20 | 16 | | |
21 | | - | |
| 17 | + | |
22 | 18 | | |
23 | | - | |
24 | | - | |
25 | | - | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
26 | 35 | | |
27 | | - | |
28 | | - | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
29 | 41 | | |
30 | | - | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
31 | 49 | | |
32 | 50 | | |
33 | 51 | | |
| |||
43 | 61 | | |
44 | 62 | | |
45 | 63 | | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
46 | 71 | | |
47 | 72 | | |
48 | 73 | | |
| |||
Lines changed: 0 additions & 20 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
13 | | - | |
14 | | - | |
15 | | - | |
16 | | - | |
17 | | - | |
18 | 13 | | |
19 | 14 | | |
20 | 15 | | |
| |||
44 | 39 | | |
45 | 40 | | |
46 | 41 | | |
47 | | - | |
48 | | - | |
49 | | - | |
50 | | - | |
51 | | - | |
52 | 42 | | |
53 | | - | |
54 | | - | |
55 | | - | |
56 | | - | |
57 | | - | |
58 | | - | |
59 | | - | |
60 | | - | |
61 | | - | |
62 | | - | |
63 | 43 | | |
64 | 44 | | |
65 | 45 | | |
| |||
Lines changed: 8 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1431 | 1431 | | |
1432 | 1432 | | |
1433 | 1433 | | |
| 1434 | + | |
| 1435 | + | |
| 1436 | + | |
| 1437 | + | |
| 1438 | + | |
| 1439 | + | |
| 1440 | + | |
| 1441 | + | |
1434 | 1442 | | |
1435 | 1443 | | |
1436 | 1444 | | |
| |||
0 commit comments