0

API(画像+テキスト)から取り込まれたコンテンツに基づいてセルのサイズを変更しようとしています。

画像、見出し (2 行)、および説明 (2 行) のためのスペースを残すように設定しました。

問題:画像が表示されない場合、見出しが 1 行しかない場合、説明がない、または説明が 1 行しかない場合があります。したがって、これらの動的コンテンツに基づいてセルのサイズを変更する必要があります。

WebListCell.m

- (void)layoutSubviews {
    [super layoutSubviews];

    self.imageView.frame = CGRectMake(1, 20, 320, 180);
    self.headlineLabel.frame = CGRectMake(10, 210, 290, 40);
    self.descriptionLabel.frame = CGRectMake(10, 250, 290, 30);

    [self.headlineLabel setNumberOfLines:2];
    [self.headlineLabel sizeToFit];
    [self.descriptionLabel setNumberOfLines:2];
    [self.descriptionLabel sizeToFit];
}

WebListViewController.m

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    Feed *feedLocal = [headlinesArray objectAtIndex:indexPath.row];
    NSString *headlineText = [NSString stringWithFormat:@"%@", feedLocal.headline];
    NSString *descriptionText = [NSString stringWithFormat:@"%@", feedLocal.description];
    cell.headlineLabel.text = headlineText;
    cell.descriptionLabel.text = descriptionText;
    }

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    WebListCell *cell = [tableView dequeueReusableCellWithIdentifier:@"WebListCell"];
    Feed *feedLocal = [headlinesArray objectAtIndex:indexPath.row];

    NSString *head = [NSString stringWithFormat:@"%@", feedLocal.headline];
    cell.headlineLabel.text = head;
    if (head.length > 100 ){
        [cell.headlineLabel setNumberOfLines:1];
    }
} // WARNING ALERT: "CONTROL REACHES END OF NON-VOID FUNCTION"

WebListCell.mセルをレイアウトしてから、レイアウトWebListViewController.mを呼び出しWebListCell.mます。私はすべてのデータを正しく取り込んでいますが、サイズ変更の助けが必要で、理解できません.StackOverflowで他の質問をチェックアウトしましたが...誰かこれを手伝ってくれますか?

現在、セルの高さを変更する機能がありません。

必要に応じて追加のコードを投稿します。

4

1 に答える 1

0

heightForRowAtIndexPathfloat 値を返すことを期待しています。つまり、セルの高さです。それが発生している例外です。

文字列が占める垂直方向のスペースを把握するには、次の方法を使用できます。

CGSize size = [feedLocal.headline sizeWithFont:FONT 
                                      forWidth:WIDTH 
                                 lineBreakMode:NSLineBreakByWordWrapping];

return size.height + SOME_PADDING;

適切な幅とパディングを試してみる必要があります。質問で言及した他の変数がいくつかありますが、一般的に、これが必要なことです。

于 2013-07-29T01:35:28.183 に答える