Force conversation view cells to update layout immediately.

// FREEBIE
pull/1/head
Matthew Chen 7 years ago
parent 0cda3661f1
commit ef820a3719

@ -35,10 +35,53 @@ NS_ASSUME_NONNULL_BEGIN
_isCellVisible = isCellVisible;
if (isCellVisible) {
[self layoutIfNeeded];
[self forceLayoutImmediately];
}
}
- (void)setFrame:(CGRect)frame
{
BOOL didSizeChange = CGSizeEqualToSize(self.frame.size, frame.size);
[super setFrame:frame];
if (didSizeChange) {
[self forceLayoutImmediately];
}
}
- (void)setBounds:(CGRect)bounds
{
BOOL didSizeChange = CGSizeEqualToSize(self.bounds.size, bounds.size);
[super setBounds:bounds];
if (didSizeChange) {
[self forceLayoutImmediately];
}
}
- (void)forceLayoutImmediately
{
NSArray<UIView *> *descendents = [ConversationViewCell collectSubviewsOfViewDepthFirst:self];
for (UIView *view in descendents) {
[view setNeedsLayout];
}
for (UIView *view in descendents.reverseObjectEnumerator) {
[view layoutIfNeeded];
}
}
+ (NSArray<UIView *> *)collectSubviewsOfViewDepthFirst:(UIView *)view
{
NSMutableArray<UIView *> *result = [NSMutableArray new];
for (UIView *subview in view.subviews) {
[result addObjectsFromArray:[self collectSubviewsOfViewDepthFirst:subview]];
}
[result addObject:view];
return result;
}
@end
NS_ASSUME_NONNULL_END

Loading…
Cancel
Save