@@ -56,6 +56,7 @@ - (void)didMoveToWindow
5656
5757@implementation ASScrollNode
5858{
59+ ASScrollDirection _scrollableDirections;
5960 BOOL _automaticallyManagesContentSize;
6061 CGSize _contentCalculatedSizeFromLayout;
6162}
@@ -70,12 +71,20 @@ - (ASLayout *)calculateLayoutThatFits:(ASSizeRange)constrainedSize
7071 restrictedToSize : (ASLayoutElementSize)size
7172 relativeToParentSize : (CGSize)parentSize
7273{
73- ASLayout *layout = [super calculateLayoutThatFits: constrainedSize
74+ ASDN::MutexLocker l (__instanceLock__); // Lock for using our instance variables.
75+
76+ ASSizeRange contentConstrainedSize = constrainedSize;
77+ if (ASScrollDirectionContainsVerticalDirection (_scrollableDirections)) {
78+ contentConstrainedSize.max .height = CGFLOAT_MAX;
79+ }
80+ if (ASScrollDirectionContainsHorizontalDirection (_scrollableDirections)) {
81+ contentConstrainedSize.max .width = CGFLOAT_MAX;
82+ }
83+
84+ ASLayout *layout = [super calculateLayoutThatFits: contentConstrainedSize
7485 restrictedToSize: size
7586 relativeToParentSize: parentSize];
76-
77- ASDN::MutexLocker l (__instanceLock__); // Lock for using our two instance variables.
78-
87+
7988 if (_automaticallyManagesContentSize) {
8089 // To understand this code, imagine we're containing a horizontal stack set within a vertical table node.
8190 // Our parentSize is fixed ~375pt width, but 0 - INF height. Our stack measures 1000pt width, 50pt height.
@@ -124,6 +133,25 @@ - (void)setAutomaticallyManagesContentSize:(BOOL)automaticallyManagesContentSize
124133{
125134 ASDN::MutexLocker l (__instanceLock__);
126135 _automaticallyManagesContentSize = automaticallyManagesContentSize;
136+ if (_automaticallyManagesContentSize == YES
137+ && ASScrollDirectionContainsVerticalDirection (_scrollableDirections) == NO
138+ && ASScrollDirectionContainsHorizontalDirection (_scrollableDirections) == NO ) {
139+ // Set the @default value, for more user-friendly behavior of the most
140+ // common use cases of .automaticallyManagesContentSize.
141+ _scrollableDirections = ASScrollDirectionVerticalDirections;
142+ }
143+ }
144+
145+ - (ASScrollDirection)scrollableDirections
146+ {
147+ ASDN::MutexLocker l (__instanceLock__);
148+ return _scrollableDirections;
149+ }
150+
151+ - (void )setScrollableDirections : (ASScrollDirection)scrollableDirections
152+ {
153+ ASDN::MutexLocker l (__instanceLock__);
154+ _scrollableDirections = scrollableDirections;
127155}
128156
129157@end
0 commit comments