1

このようなレイアウトで、3 つのラベルを含む UITableview にセクション ヘッダーを作成しようとしています。

-------------------------------
| title              | dist   |
|                             |
| Description                 |
|                             |
-------------------------------

Titletimeはどちらも固定サイズですがdescription、コンテンツに基づいて高さを自動的に調整する必要があり、最小高さはテキスト 1 行です。

私の現在のヘッダー構造は

UIView
|_ UIView
      |_ UILabel
      |_ UILabel
      |_ UILabel

外側の UIView は、明確な背景を持つセクション ヘッダー自体であり、内側の UIView はラベル付きの表示ビューです。

私が求めているのは、説明ラベルの内容に応じてセクション ヘッダーの高さを調整することです。

を実装してみましたtableView:heightForHeaderInSection:が、うまくいかないようです。iOSは、制約を設定したことを考えると理にかなっていると思いますが、この方法で手動でオーバーライドする必要があることについて不平を言っていますか?

ビュー自体のサイズを変更できるようにする制約を作成するにはどうすればよいですか? 現在、次の実装がありますviewForHeaderInSection:

- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    if (section == 0) {
        UIView *header = [UIView new];
        UIView *headerBg = [UIView new];
        UILabel *title = [UILabel new];
        UILabel *distance = [UILabel new];
        UILabel *desc = [UILabel new];

        headerBg.translatesAutoresizingMaskIntoConstraints = NO;
        title.translatesAutoresizingMaskIntoConstraints = NO;
        distance.translatesAutoresizingMaskIntoConstraints = NO;
        desc.translatesAutoresizingMaskIntoConstraints = NO;

        [headerBg setBackgroundColor:[UIColor colorWithWhite:1.0 alpha:0.8]];

        [title setFont:[UIFont fontWithName:@"HelveticaNeue-Bold" size:14.0]];
        [title setTextColor:kFONT_COLOUR];
        NSString *address = _place.address ? (_place.address.length > 0 ? _place.address : @"Unknown Address") : @"Unknown Address";
        [title setText:address];

        [distance setFont:[UIFont fontWithName:@"HelveticaNeue" size:14.0]];
        [distance setTextColor:kFONT_COLOUR];
        [distance setText:@"Distance: ?m"];
        [distance setTextAlignment:NSTextAlignmentRight];

        [desc setFont:[UIFont fontWithName:@"HelveticaNeue" size:11.0]];
        [desc setTextColor:kFONT_COLOUR];
        [desc setNumberOfLines:0];
        [desc setLineBreakMode:NSLineBreakByWordWrapping];
        [desc setText:_place.desc ? (_place.desc.length > 0 ? _place.desc : @"No Description Given") : @"No Description Given"];

        [headerBg addSubview:title];
        [headerBg addSubview:distance];
        [headerBg addSubview:desc];

        NSDictionary *bindings = NSDictionaryOfVariableBindings(title, distance, desc, headerBg);

        [headerBg addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-9-[title]-[distance(100)]-9-|" options:NSLayoutFormatAlignAllBaseline metrics:nil views:bindings]];
        [headerBg addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-9-[desc]-9-|" options:NSLayoutFormatAlignAllBaseline metrics:nil views:bindings]];
        [headerBg addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-9-[title(20)]-[desc]-|" options:NSLayoutFormatAlignAllLeading metrics:nil views:bindings]];

        [header addSubview:headerBg];
        [header addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[headerBg]|" options:NSLayoutFormatAlignAllBaseline metrics:nil views:bindings]];
        [header addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[headerBg]-9-|" options:NSLayoutFormatAlignAllBaseline metrics:nil views:bindings]];
        return header;
    }

    return nil;
}

どんな助けでも素晴らしいでしょう:)

4

0 に答える 0