Open x1726919 opened 3 years ago
先说bug: 在demo里的跳转按钮去到的controller里如果数据源不对称,例如在demo里修改成这样: if (indexPath.row == 1) { [cell setCellInfo:@[]]; }else if(indexPath.row == 2){ [cell setCellInfo:@[@"林俊杰"]]; }else{ [cell setCellInfo:@[@"林俊杰",@"张学友",@"刘德华",@"陶喆",@"王力宏",@"王菲",@"Taylor swift",@"周杰伦",@"owl city",@"汪苏泷",@"许嵩",@"李代沫",@"那英",@"羽泉",@"刀郎",@"田馥甄",@"庄心妍",@"林宥嘉",@"薛之谦",@"萧敬腾",@"王若琳"]]; } 会导致tableview的第10个之后的cell高度出问题,初步分析是第一次计算进入updateTagViewLayout时,因为用的是autolayout,所以当时获取的self.frame.size.width=0.这个问题导致判断换行时每一次都换行,所以最后得出- (CGSize)intrinsicContentSize时高度非常高,后面虽然在- (void)layoutSubviews里进行了一次重建[self updateTagViewLayout];重新获取了正确高度并且使用[self invalidateIntrinsicContentSize];重新对外相应布局了,但是可能由于tableview本身的某些自动适配问题,在第10个cell之后只认了异常高度,看看能不能从优先级着手解决。这个属于兼容性的bug。
再说可以优化的: 1.当updateTagViewLayout方法里检测items.count == 0时,建议增加一次重载[self invalidateIntrinsicContentSize];因为tableview的复用机制,如果没有这次重载,那么在demo里的跳转按钮去到的controller里的第二个setCellInfo数据源如果是空字符串,则会复用了第一个的高度。在- (void)setTagsArray:(NSArray *)tagsArray同样也是有这个问题,建议放宽f (!tagsArray || !tagsArray.count)判定
@x1726919 我尝试去修复, 即使加了判断也无法获取真实的宽度, 被迫只能在cell初始化时设置宽度 CGRect frame = self.contentView.frame; frame.size.width = [UIScreen mainScreen].bounds.size.width; self.contentView.frame = frame; 这样可以正常工作了,但并不完美
CGRect frame = self.contentView.frame; frame.size.width = [UIScreen mainScreen].bounds.size.width; self.contentView.frame = frame;
先说bug: 在demo里的跳转按钮去到的controller里如果数据源不对称,例如在demo里修改成这样: if (indexPath.row == 1) { [cell setCellInfo:@[]]; }else if(indexPath.row == 2){ [cell setCellInfo:@[@"林俊杰"]]; }else{ [cell setCellInfo:@[@"林俊杰",@"张学友",@"刘德华",@"陶喆",@"王力宏",@"王菲",@"Taylor swift",@"周杰伦",@"owl city",@"汪苏泷",@"许嵩",@"李代沫",@"那英",@"羽泉",@"刀郎",@"田馥甄",@"庄心妍",@"林宥嘉",@"薛之谦",@"萧敬腾",@"王若琳"]]; } 会导致tableview的第10个之后的cell高度出问题,初步分析是第一次计算进入updateTagViewLayout时,因为用的是autolayout,所以当时获取的self.frame.size.width=0.这个问题导致判断换行时每一次都换行,所以最后得出- (CGSize)intrinsicContentSize时高度非常高,后面虽然在- (void)layoutSubviews里进行了一次重建[self updateTagViewLayout];重新获取了正确高度并且使用[self invalidateIntrinsicContentSize];重新对外相应布局了,但是可能由于tableview本身的某些自动适配问题,在第10个cell之后只认了异常高度,看看能不能从优先级着手解决。这个属于兼容性的bug。
再说可以优化的: 1.当updateTagViewLayout方法里检测items.count == 0时,建议增加一次重载[self invalidateIntrinsicContentSize];因为tableview的复用机制,如果没有这次重载,那么在demo里的跳转按钮去到的controller里的第二个setCellInfo数据源如果是空字符串,则会复用了第一个的高度。在- (void)setTagsArray:(NSArray *)tagsArray同样也是有这个问题,建议放宽f (!tagsArray || !tagsArray.count)判定