0

私が欲しいのは、カードとして提示された投稿のテーブルビューです。(例えばFacebookアプリのように)

カスタム uitablecell を使用して動的な uitableview を作成し、そこに 2 つのラベル (タイトルとサブタイトル) を持つ uiview を配置しました。セルの高さは、heightForRowAtIndexPath 内の予測されたラベルの高さに従って手動で測定され、ラベルの高さは優先度の低い高さの制約によって自動的に測定されます。

ポートレートモードではすべてがうまく機能します。向きが横向きに変わると、内部の uitablecell と uiview の高さが完全に変わりますが、制約によって制御されるラベルの高さは回転前と同じままです。

いくつかのスクリーンショット

アップデート:

下部スペースの制約を作成したところです...以前に助けを借りずにこれを行っていたので、実際には信じられませんが、すべてが正常に近いように見えます. 小さなラベルの高さのラグはまだここにあります..

コード:

- (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 メソッドでそれらを測定しました。それは非常に簡単で、すべてがうまく機能するようになりました。

4

1 に答える 1

0

ラベルの高さをセルの高さに合わせて変更する場合は、セルの上部と下部に高さの制約があり、高さの制約が固定されていないことを確認してください。2 つのラベルが互いに重なっている場合、上のラベルにはセルの上部に制約があり、もう 1 つはセルの下部から下部のラベルの上部に制約されている必要があります。下部ラベルは、セルの下部に 1 つある必要があります。

于 2013-07-20T14:58:52.793 に答える