2016-06-18 8 views
4

ダイナミックテーブルビューセルを持つテーブルビュー(B)を持つすべてのカスタムセルがあります。ダイナミックセルのテーブルビューを設定するテーブルビューの高さの制約にコンテンツの高さを設定するios

at tableview(A)cellForRowAtIndex。

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

    MainMessageTVCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MsgMainCell"]; 

     cell.selectionStyle = UITableViewCellSelectionStyleNone; 

     NSInteger index = indexPath.row; 

     MessageMain *result = tableData[index]; 

     cell.dateLabelTC.text = [NSString stringWithFormat:@"Date : %@",result.createdTime]; 
     cell.subjectLabelTC.text = [NSString stringWithFormat:@"Subject : %@",result.subject]; 

     NSArray *arrList = result.messageList; 
     [cell setupTableData:(NSMutableArray *)arrList]; 

     [cell setNeedsUpdateConstraints]; 
} 

テーブルビュー(A)のカスタムセルリロードテーブルビュー(B)。

-(void)setupTableData:(NSMutableArray *)tableData{ 

    _tableData = tableData; 

    [self.tableView reloadData]; 
} 
-(void)updateConstraints{ 
    [super updateConstraints]; 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     [self.tableView layoutIfNeeded]; 
     CGFloat height = self.tableView.contentSize.height;//+1000; 
     tableBHeightConstraints.constant = height; 
    }); 
} 

tableBHeightConstraintsテーブルビューでテーブルビュー(B)の高さの制約(A)のセルの子です。 tableBHeightConstraints.constantはすべての計算制約で正しい値を取得しません。

ダイナミックテーブルセルの高さを設定した後、tableView.contentSize.heightを正確に取得するのに最適な場所または方法は何ですか?

これはテーブルビューである(A)のセル enter image description here

enter image description here

これは、テーブルビュー(B)でのセル

人を助けてください。

答えて

1

はこれを試してみてください。

のUITableView

の高さ制約を取る

_tableViewHieghtConstraint.constant =行の高さ*配列の数。

in tableview numberセクション方式。

+0

私は動的なセルを持っており、ヘッダーとフッターも持っているので、テーブルの内容の高さをどのように取得するか。 –

0

これは単に同じ高さに制約を設定すると良いでしょう:視覚的な制約に

tableA_cell.contentView height = TableB height 

それはこのようなものになるだろう。そして、魔法は、それ自体で起こるはず

NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(tableB); 
[cell.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V|[tableB|" options:0 metrics:0 views:viewsDictionary]; 

あなたがTABLEBを変更した場合は、単に自動的にそれの高さは、細胞

+0

tは単純に制約を同じ高さに設定する方が良い: tableA_cell.contentView height = TableB heightそれは良いアイデアだが、どうすればいいのだろうか。あなたは私に考えを与えてください、私は制約を使用していますか? tableviewBの高さを設定するのに最適な場所は何ですか –

+0

私の更新された答えを見てください。あなたの質問に本当に十分なコードがないのでこれ以上答えません。 tableBの作成場所や制約を設定するコードはありません。 – markt

+0

添付画像のすべての制約を見ることができます –

4

はあなたのviewDidLoadメソッドで次のコードを追加します更新するために、表Aに

[self.tableView beginUpdates] 
[self.tableView endUpdates] 

を呼び出します。

self.tableView.rowHeight = UITableViewAutomaticDimension; 
    [self.tableView setEstimatedRowHeight:85.0]; 

もの行に使用する高さの委譲を要求

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return 100; 
} 

がheightForRowAtIndexPath.The方法の自動寸法を割り当て、estimatedHeightForRowAtIndexPath方法を含み、次のように推定された行の高さを返します指定された場所。あなたのテーブルの行には、動的高さであるためには

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return UITableViewAutomaticDimension; 
} 

NOTE

は、contentview内のラベルは、彼らが縮小または内容ごとに成長できるように、上部と下部に固定する必要があります。あなたがどんな困難に直面している場合に備えて私を更新してください。

+0

私は既にこれをテーブルviewAとtableviewBのコードに加えました。 tableviewBの高さは、セルの高さが増加するにつれて増加します。これは、tableviewAセルの高さも増加するため、データ供給によるものです。 –

+0

あなたはさらに –

+0

を説明することができますか?ラベルにセットされたテキストのためにtableviewBのセルの高さが増加した場合(最後に添付画像を見ることができます)、その後tableviewBの高さが増加します。それはtableviewAのセル内にあるので、tableviewAのセルも増加するはずです。その別のテーブルビューのセルのネストテーブルビュー。 –

0

変更を-(void) updateConstraintsから-(void) viewDidLayoutSubviewsに移動してみてください。

-(void)viewDidLayoutSubviews{ 
[super viewDidLayoutSubviews]; 

dispatch_async(dispatch_get_main_queue(), ^{ 
    [self.tableView layoutIfNeeded]; 
    CGFloat height = self.tableView.contentSize.height;//+1000; 
    tableBHeightConstraints.constant = height; 
}); 

}

+0

私は試しましたが、正確な高さが得られませんでした。 –

1

あなたはこの仕事を得ることができない場合は、なぜ別の何かをしようとしません。 tableCellにtableViewを張り付けようとするのではなく、2つのテーブルを統一するようにデータソースを変更するだけではいかがですか?これは、より効率的で、単一のテーブルとしてうまく機能するように、おそらくより優れたソリューションです。

グループ化されたスタイルを使用すると、各グループは効果的にヘッダーとフッターを持つ個別のtableViewになります。

+0

私は選択肢がありません。あなたが感謝したように私はやっていなければなりません。グループスタイルの問題すべてのグループで背景画像を設定することはできません。すべてのヘッダー、セル、フッターにイメージを設定する必要があります。 –

関連する問題