forkingdog / UITableView-FDTemplateLayoutCell

Template auto layout cell for automatically UITableViewCell height calculating
MIT License
9.93k stars 2.01k forks source link

Extra top and bottom spacing in multiple lines label 多行label高度计算偏差 #255

Closed Peter0065 closed 7 years ago

Peter0065 commented 7 years ago

此处每行cell内只有一个label,numberOfLines = 0 。当label内容大于一行时有出现额外的top和bottom 。 3466477f-9170-4871-98a3-f5a726d4963d 直接使用iOS8 self size cell表现正常 6e73b782-9618-4e13-89f7-5ba3f70db8cd

Peter0065 commented 7 years ago

找到问题所在了。这边的场景是,cell里面内嵌tableview 在配置实体(外部tableview cellforrow时)的时候根据内部tableView内容cell的总高度(+= fd_heightForCellWithIdentifier )来调整tableView高度,使用的是autolayout。但是在cellforrow的时候storyboard或xib内容view并不是实际frame,我这边的xib宽度是320而实际是375pt的iphone6。因为调用了fd_heightForCellWithIdentifier 进而在- (CGFloat)fd_systemFittingHeightForConfiguratedCell:(UITableViewCell *)cell里面 CGFloat contentViewWidth = CGRectGetWidth(self.frame);中self(tableView)还是xib的宽度。320 < 375导致实际算计的label高度偏大。

解决方案: 在包含tableview的cell的awakeFromNib方法中调整cell的实际frame(我这边的场景直接就是屏幕宽度)

- (void)awakeFromNib {
    [super awakeFromNib];
    // Initialization code

    CGRect rect = self.frame;
    rect.size.width = SCREEN_WIDTH;
    self.frame = rect;

    [self layoutIfNeeded];
}

建议@sunnyxx 是否能考虑这种情况在后面的版本中优化一下?

ws752958369 commented 7 years ago

楼主我也遇到了你这种情况,但不同的是,我竖屏下都没问题,只有的横屏下 多行的Label里面的文本内容上下会多出额外的空白高度。纯代码布局

ws752958369 commented 7 years ago

simulator screen shot 2017 1 17 11 06 16 simulator screen shot 2017 1 17 11 06 25