Skip to content
This repository has been archived by the owner on Feb 2, 2023. It is now read-only.

Commit

Permalink
Merge pull request #877 from soniccat/master
Browse files Browse the repository at this point in the history
[ASTextNode] Possible layout fix (fixes a case with Interface Builder initialization ordering)
  • Loading branch information
appleguy committed Dec 11, 2015
2 parents 745f724 + ad28213 commit 7380296
Showing 1 changed file with 25 additions and 14 deletions.
39 changes: 25 additions & 14 deletions AsyncDisplayKit/ASTextNode.mm
Original file line number Diff line number Diff line change
Expand Up @@ -223,25 +223,13 @@ - (void)didLoad
- (void)setFrame:(CGRect)frame
{
[super setFrame:frame];
if (!CGSizeEqualToSize(frame.size, _constrainedSize)) {
// Our bounds have changed to a size that is not identical to our constraining size,
// so our previous layout information is invalid, and TextKit may draw at the
// incorrect origin.
_constrainedSize = CGSizeMake(-INFINITY, -INFINITY);
[self _invalidateRenderer];
}
[self _invalidateRendererIfNeeded:frame.size];
}

- (void)setBounds:(CGRect)bounds
{
[super setBounds:bounds];
if (!CGSizeEqualToSize(bounds.size, _constrainedSize)) {
// Our bounds have changed to a size that is not identical to our constraining size,
// so our previous layout information is invalid, and TextKit may draw at the
// incorrect origin.
_constrainedSize = CGSizeMake(-INFINITY, -INFINITY);
[self _invalidateRenderer];
}
[self _invalidateRendererIfNeeded:bounds.size];
}

#pragma mark - Renderer Management
Expand Down Expand Up @@ -283,6 +271,27 @@ - (void)_invalidateRenderer
_renderer = nil;
}

- (void)_invalidateRendererIfNeeded
{
[self _invalidateRendererIfNeeded:self.bounds.size];
}

- (void)_invalidateRendererIfNeeded:(CGSize)newSize
{
if ([self _needInvalidateRenderer:newSize]) {
// Our bounds of frame have changed to a size that is not identical to our constraining size,
// so our previous layout information is invalid, and TextKit may draw at the
// incorrect origin.
_constrainedSize = CGSizeMake(-INFINITY, -INFINITY);
[self _invalidateRenderer];
}
}

- (BOOL)_needInvalidateRenderer:(CGSize)newSize
{
return !CGSizeEqualToSize(newSize, _constrainedSize);
}

#pragma mark - Modifying User Text

- (void)setAttributedString:(NSAttributedString *)attributedString {
Expand Down Expand Up @@ -377,6 +386,8 @@ + (void)drawRect:(CGRect)bounds withParameters:(ASTextNodeDrawParameters *)param

- (NSObject *)drawParametersForAsyncLayer:(_ASDisplayLayer *)layer
{
[self _invalidateRendererIfNeeded];

// Offset the text origin by any shadow padding
UIEdgeInsets shadowPadding = [self shadowPadding];
CGPoint textOrigin = CGPointMake(self.bounds.origin.x - shadowPadding.left, self.bounds.origin.y - shadowPadding.top);
Expand Down

0 comments on commit 7380296

Please sign in to comment.