Merge branch 'charlesmchen/forceConversationCellLayout'

This commit is contained in:
Matthew Chen 2017-11-21 17:52:20 -05:00
commit b3d9363961
1 changed files with 44 additions and 1 deletions

View File

@ -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