Переменная высота UIViews и метки - PullRequest
3 голосов
/ 17 июня 2010

Ладно, сейчас я не нахожусь в ячейке таблицы.(Я видел много потоков относительно высоты ячеек.)

У меня есть подробный вид с заголовком и описанием в верхней части представления, за которым следует tableView под ним.Если описание будет изменяться по длине, как мне заставить tableView корректироваться с ним соответствующим образом, чтобы он всегда начинался непосредственно под ним?

Я вижу, как Apple делает это в приложении магазина приложений.Если вы посмотрите на описание приложения (как если бы вы его купили), у него есть описание приложения, и там, где заканчивается скроллинг, следует скриншот.Как они изменяют высоту текстового описания таким образом?

Они делают все это программно или я могу использовать элементы управления макетом в IB, чтобы сделать то же самое?

Ответы [ 3 ]

1 голос
/ 17 июня 2010

Элементы управления макетом в IB изменяют размер представления при изменении размеров родительского представления. В этом случае (я предполагаю) метка и табличное представление являются родственными представлениями, поэтому вам нужно сделать это программно. Имея размеры для метки, чтобы она соответствовала, найдите ее нижнюю часть (местоположение источника y и высоту метки) и используйте ее для указания места размещения табличного представления. Вы, вероятно, сделаете это в -viewDidLoad или -viewWillAppear:, в зависимости от того, когда у вас достаточно информации для вычисления.

1 голос
/ 17 июня 2010

вам необходимо программно добавить табличное представление в ваше представление и установить его фрейм согласно размеру вашего подробного представления

1> получить текущий кадр подробного просмотра 2> добавить его высоту и затем добавить табличное представление к вашему представлению

как

UITableView *table = [[UITableView alloc] initWithFrame:CGRectMake(initX , initY + DetailViewFrame.size.height, TableWidth, TableHeight) style:UITableViewStylePlain];
[view addSubView:table];
0 голосов
/ 17 июня 2010

Я думаю, что вам нужно использовать "sizeWithFont" для вычисления высоты ячейки во время выполнения, см. Следующее:

- (CGFloat) tableView: (UITableView *) tableView heightForRowAtIndexPath: (NSIndexPath *) indexPath
{
  CGSize labelSize = CGSizeMake(200.0, 20.0);
  if ([string length] > 0)
    labelSize = [string sizeWithFont: [UIFont boldSystemFontOfSize: 17.0] constrainedToSize: CGSizeMake(labelSize.width, 1000) lineBreakMode: UILineBreakModeWordWrap];
  return 24.0 + labelSize.height;
}

И в "cellForRowAtIndexPath"

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
        cell.accessoryType = UITableViewCellAccessoryNone;
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        cell.autoresizingMask = UIViewAutoresizingFlexibleHeight;       
    }

cell.textLabel.text = @"Your string with variable length";              
        [cell.textLabel setFont:[UIFont boldSystemFontOfSize:12]];
        //[cell.textLabel setAdjustsFontSizeToFitWidth:YES]; 
        [cell.textLabel setBaselineAdjustment:UIBaselineAdjustmentAlignBaselines]; 
        [cell.textLabel setLineBreakMode:UILineBreakModeWordWrap];
        [cell.textLabel setNumberOfLines:0];
return cell;
}

Надеюсь, что этопомогает тебе ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...