Итак, у меня есть код, который успешно работает на iOS 7.0, но не в 7.1. У меня есть простой табличный вид с кодом:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 10;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 70.0;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
for (UIView *view in cell.contentView.subviews) {
[view removeFromSuperview];
}
UILabel *label = [[UILabel alloc] init];
label.text = [NSString string];
for (NSInteger i = 0; i < 20; i++) {
label.text = [label.text stringByAppendingString:@"label String "];
}
label.translatesAutoresizingMaskIntoConstraints = NO;
label.numberOfLines = 0;
label.lineBreakMode = NSLineBreakByWorldWrapping;
//label.lineBreakMode = NSLineBreakByTruncatingTail; //I have tried this too
[cell.contentView addSubview:label];
NSDictionary *dict = NSDictionaryOfVariableBindings(label);
[cell.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-8-[label]-8-|" options:0 metrics:nil views:dict]];
[cell.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-8-[label]" options:0 metrics:nil views:dict]];
if (indexPath.row == 0) {
label.textColor = [UIColor colorWithRed:1.0 green:0 blue:0 alpha:1.0];
}
else if (indexPath.row == 1) {
label.textColor = [UIColor colorWithRed:0 green:1.0 blue:0 alpha:1.0];
}
else if (indexPath.row == 2) {
label.textColor = [UIColor colorWithRed:0 green:0 blue:1.0 alpha:1.0];
}
else {
label.textColor = [UIColor colorWithWhite:0.3 alpha:1.0];
}
cell.backgroundColor = [UIColor colorWithWhite:1.0 alpha:1.0];
return cell;
}
У меня есть 1секция с 10 стрелками. При повторном использовании каждой строки я удаляю все subviews из contentView (я попробовал alloc-init UITableViewCell, но пришел с теми же результатами).
В iOS 7.0 UILabel отображается только в ячейке, к которой принадлежит. Но в 7.1 UILabel продолжает показывать по другим ячейкам. Что интересно, когда я нажимаю на ячейку, она перестает накладываться на других, но только до тех пор, пока я не нажму на ячейку выше. Мой вопрос в том, как заставить его работать с 7.1-устройствами, например, на 7.0ones.
Я попробовал как симулятор, так и устройство, и я взглянул на IOS 7.1 API Diffs, но ничего не нашел в этом.
Возможно, это проблема автоматического макета, у меня есть переменная высота UILabel, но мне нужно это сделать. Я хочу иметь весь текст в UILabel, но отображать только часть UILabel, которая может отображаться в ячейке, которая по умолчанию работает в 7.0, но 7.1 меняет это, и я не понимаю, почему и как с этим бороться.
Это папка с Dropbox для изображений с подробным объяснением: Папка с изображениями
Обновление: я пробовал такие вещи, как тез, но ничего не работало для меня.
cell.frame = CGRectMake(0, 0, self.tableView.frame.size.width, 70);
cell.contentView.frame = CGRectMake(0, 0, self.tableView.frame.size.width, 70);
cell.opaque = NO;
cell.contentView.opaque = NO;
cell.clearsContextBeforeDrawing = NO;
cell.contentView.clearsContextBeforeDrawing = NO;
cell.clipsToBounds = NO;
cell.contentView.clipsToBounds = NO;