2013-07-20 2 views
0

Что я хочу - это табличное представление сообщений, представленных в виде карт. (например, в приложении для Facebook)Динамическая высота этикетки внутри UITableCell при повороте

Я сделал динамическое uitableview с пользовательским uitablecell и разместил там uiview с двумя ярлыками - название и субтитры. Высота ячейки измеряется вручную в соответствии с прогнозируемой высотой надписей внутри heightForRowAtIndexPath, а высота меток измеряется автоматически с помощью ограничений по высоте с низким приоритетом.

Все работает отлично в портретном режиме. Когда ориентация меняется на ландшафт - uitablecell и uiview внутри, она отлично меняет их высоту, но высота надписей, контролируемых ограничениями, остается такой же, как и перед вращением.

Some screenshots

UPDATE:

Just made a bottom space constraint... Я не могу на самом деле это поверить, потому что я делал это раньше без помощи, но все выглядит близко к нормальному. Немного лаг метки высота еще здесь ..

КОД:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    NSInteger title_size = 17; 
    NSInteger subtitle_size = 14; 

    NSInteger card_horizontal_margin = 10 * 2; 
    NSInteger cell_horizontal_margin = 10 * 2; 
    NSInteger full_horizontal_margin = card_horizontal_margin + cell_horizontal_margin; 

    NSInteger nameHeight = 0; 
    NSInteger descHeight = 0; 

    NSArray *items = [userDefaults objectForKey: feedType]; 
    NSString *descText = [[items valueForKey:@"description"] objectAtIndex:indexPath.row]; 
    NSString *nameText = [[items valueForKey:@"name"] objectAtIndex:indexPath.row]; 

    NSInteger line_width = self.tableView.frame.size.width - full_horizontal_margin; 

    if (![nameText isEqual:[NSNull null]]) { 

     CGSize nameTextSize = [nameText sizeWithFont:[UIFont boldSystemFontOfSize:title_size] constrainedToSize:CGSizeMake(line_width, 1000.0f) lineBreakMode:NSLineBreakByWordWrapping]; 

     nameHeight = nameTextSize.height; 
    } 

    if (![descText isEqual:[NSNull null]]) { 

     CGSize descTextSize = [descText sizeWithFont:[UIFont systemFontOfSize:subtitle_size] constrainedToSize:CGSizeMake(line_width, 1000.0f) lineBreakMode:NSLineBreakByWordWrapping]; 

     descHeight = descTextSize.height; 
    } 

    NSInteger full_height = nameHeight + descHeight + 50; 

    return full_height; 

} 

КАК исправить эту

Просто сделал 2 высокого приоритета ограничений для каждой метки и измеряют их в методе layoutSubviews из класс ячеек. Это было очень просто, и теперь все отлично работает.

+0

Вы пытались добавить ограничение со дна субтитров в нижней части ячейки? – Stakenborg

ответ

0

Если вы хотите, чтобы высота ярлыка изменялась вместе с высотой ячейки, просто убедитесь, что у вас есть ограничения по высоте в верхней и нижней частях ячейки, и нет фиксированного ограничения по высоте. Если ваши две метки находятся поверх друг друга, верхняя часть должна иметь ограничение на верхнюю часть ячейки, а одну - снизу до верхней части нижней метки. Нижняя метка должна иметь один к нижней части ячейки.

+0

Все сделано так, как вы сказали, за исключением двух вещей: 1. Ограничения расстояния связаны с uiview внутри ячейки. 2. У меня нет ограничений расстояния до нижней части этого uiview beacause, я пытался это сделать, и были проблемы даже в исходной ориентации. все показано на картинке –

+0

Попробуйте добавить ограничение со дна метки субтитров к нижней части UIView, а затем удалить ограничения высоты, которые у вас есть на ярлыках. – rdelmar

+0

http://s2.ipicture.ru/uploads/20130720/nH715h3C.png портрет все еще в порядке, но пейзаж выглядит полностью сломанным. –

Смежные вопросы