所以我有一个N行数的tableview。 tableview的设计就像一条游泳跑道。每排都有游泳运动员的形象,游泳运动员的X位置取决于他们在比赛中的位置。
UITableViewCell采用IB设计并使用Autolayout Constraints。
每个细胞游泳者从阵列的索引中获取他们的位置,即......
//方法 - cellForRowAtIndexPath:
cell.swimmerLeading.constant = [_array [indexPath.row] integerValue]
每当我滚动时,swimmerLeading.constant都会重置回原来的值8;
有关原因的任何线索?
- (void)viewDidLoad {
...
[self registerNib:[UINib nibWithNibName:@"RacePredictorTrackTableViewCell" bundle:nil] forCellReuseIdentifier:@"TrackCell"];
...
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == TableSectionTrack) {
RacePredictorTrackTableViewCell *cell = (RacePredictorTrackTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"TrackCell" forIndexPath:indexPath];
cell.delegate = self;
cell.indexPath = indexPath;
Runner *runner = _runners[indexPath.row];
cell.isStarred = NO;
cell.cellPositionlabel.text = runner.predictorPlace;
cell.cellPercentageFloat = runner.predictorRanking.floatValue;
return cell;
}
}
cell.cellPercentageFloat只是一个setter方法,它将值设置为两个约束,游泳者和游泳者的标签
RacePredictorTrackTableViewCell.m
- (void)setCellPercentageFloat:(CGFloat)cellPercentageFloat {
cellPercentageFloat = cellPercentageFloat / 100;
CGFloat labelWidth = _cellHorseLabel.intrinsicContentSize.width;
CGFloat labelRaceLineBuffer = 8;
_horseImageViewLeading.constant = (self.totalSpace * cellPercentageFloat) + kOriginalHorseImageViewLeading;;
if ((_horseImageViewLeading.constant + _horseImageViewWidth.constant) > labelWidth) {
_horseLabelLeading.constant = (_horseImageViewLeading.constant + _horseImageViewWidth.constant) - labelWidth - labelRaceLineBuffer;
} else {
_horseLabelLeading.constant = _horseImageViewLeading.constant;
}
}