diff --git a/AsyncDisplayKit/ASDisplayNode.mm b/AsyncDisplayKit/ASDisplayNode.mm index 7a76802ea9..85d2e4ecfa 100644 --- a/AsyncDisplayKit/ASDisplayNode.mm +++ b/AsyncDisplayKit/ASDisplayNode.mm @@ -1420,14 +1420,9 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c) [self invalidateCalculatedLayout]; } -/** - * The node's supernodes are traversed until a ancestor node is found that does not require layout. Then layout - * is performed on the entire node-tree beneath that ancestor - */ - (void)__layoutIfNeeded { - // TODO: calesc: What should happen in here? Especially if we layoutIfNeeded is called and the view / layer is not created yet - [self __layoutSublayers]; + // For now this is a no op. } - (void)__setNeedsDisplay @@ -1546,7 +1541,7 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c) // If the size of the new layout to apply did change from the current bounds, invalidate the whole tree up // so the root node can handle a resizing if necessary - if (CGSizeEqualToSize(self.bounds.size, pendingLayout->layout.size) == NO) { + if (CGSizeEqualToSize(CGSizeMake(ASCeilPixelValue(self.bounds.size.width), ASCeilPixelValue(self.bounds.size.height)), pendingLayout->layout.size) == NO) { [self invalidateSize]; } diff --git a/AsyncDisplayKitTests/ASDisplayNodeImplicitHierarchyTests.m b/AsyncDisplayKitTests/ASDisplayNodeImplicitHierarchyTests.m index d88e0d24ff..6d32856497 100644 --- a/AsyncDisplayKitTests/ASDisplayNodeImplicitHierarchyTests.m +++ b/AsyncDisplayKitTests/ASDisplayNodeImplicitHierarchyTests.m @@ -91,6 +91,7 @@ }; ASDisplayNodeSizeToFitSizeRange(node, ASSizeRangeMake(CGSizeZero, CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX))); + [node view]; [node layoutIfNeeded]; XCTAssertEqual(node.subnodes[0], node1); @@ -127,6 +128,7 @@ }; ASDisplayNodeSizeToFitSizeRange(node, ASSizeRangeMake(CGSizeZero, CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX))); + [node view]; [node layoutIfNeeded]; XCTAssertEqual(node.subnodes[0], node1); XCTAssertEqual(node.subnodes[1], node2); @@ -192,6 +194,7 @@ }; // Intentionally trigger view creation + [node view]; [node2 view]; XCTestExpectation *expectation = [self expectationWithDescription:@"Fix IHM layout also if one node is already loaded"]; @@ -205,6 +208,7 @@ dispatch_async(dispatch_get_main_queue(), ^{ // Layout on main + [node setNeedsLayout]; [node layoutIfNeeded]; XCTAssertEqual(node.subnodes[0], node1); diff --git a/AsyncDisplayKitTests/ASDisplayNodeTests.m b/AsyncDisplayKitTests/ASDisplayNodeTests.m index c68e699381..b1f7ec7a2a 100644 --- a/AsyncDisplayKitTests/ASDisplayNodeTests.m +++ b/AsyncDisplayKitTests/ASDisplayNodeTests.m @@ -2168,6 +2168,7 @@ static bool stringContainsPointer(NSString *description, id p) { }; ASDisplayNodeSizeToFitSize(node, CGSizeMake(100, 100)); + [node view]; [node layoutIfNeeded]; NSInteger underlayIndex = [node.subnodes indexOfObjectIdenticalTo:underlay]; @@ -2189,6 +2190,7 @@ static bool stringContainsPointer(NSString *description, id p) { }; ASDisplayNodeSizeToFitSize(node, CGSizeMake(100, 100)); + [node view]; [node layoutIfNeeded]; NSInteger underlayIndex = [node.subnodes indexOfObjectIdenticalTo:underlay];