From dc2255d5d8c70ff96ee37f8ecb1eaaee7a981a91 Mon Sep 17 00:00:00 2001 From: Michael Schneider Date: Tue, 12 Jul 2016 06:42:40 -0700 Subject: [PATCH] Fix setNeedsLayout triggered from subnode will not trigger relayout --- AsyncDisplayKit/ASDisplayNode.mm | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/AsyncDisplayKit/ASDisplayNode.mm b/AsyncDisplayKit/ASDisplayNode.mm index f6f5e06cbc..58b24a5b76 100644 --- a/AsyncDisplayKit/ASDisplayNode.mm +++ b/AsyncDisplayKit/ASDisplayNode.mm @@ -1055,13 +1055,15 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c) - (void)__setNeedsLayout { ASDisplayNodeAssertThreadAffinity(self); + _propertyLock.lock(); - if ([self _hasDirtyLayout]) { + if (_layout == nil) { + // Can't proceed without a layout as no constrained size would be available _propertyLock.unlock(); return; } - + [self invalidateCalculatedLayout]; if (_supernode) { @@ -1091,6 +1093,7 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c) CGFloat yDelta = (newSize.height - oldSize.height) * anchorPoint.y; self.position = CGPointMake(oldPosition.x + xDelta, oldPosition.y + yDelta); } + _propertyLock.unlock(); }