16

だから私は非常に基本的な問題を抱えています。UITableView内にこれがありview、このテーブルの高さを、テーブル内のすべての行を表示するために必要な高さにしたいと考えています。したがって、スクロールできるようにしたくありません。すべての行を表示したいだけです。(行は数量が動的であり、height)。

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CGSize cellSize = [[[_stepsArray objectAtIndex:indexPath.row]content] sizeWithFont:[UIFont boldSystemFontOfSize:18.0f] constrainedToSize:CGSizeMake(528.0f, CGFLOAT_MAX)lineBreakMode:NSLineBreakByWordWrapping];
    return cellSize.height;
}

20行だと表が非常に高くなりますが、1行しかない場合は非常に小さくなり、19行下に他のコンテンツが表示されません。

4

6 に答える 6

22

私が正しく理解していれば、各行の高さを合計し、それに基づいてテーブルビューの高さを調整できるはずです:

CGFloat tableHeight = 0.0f;
for (int i = 0; i < [_stepsArray count]; i ++) {
    tableHeight += [self tableView:self.tableView heightForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];
}
self.tableView.frame = CGRectMake(self.tableView.frame.origin.x, self.tableView.frame.origin.y, self.tableView.frame.size.width, tableHeight);

[tableView reloadData] の直後にこれを行うことができます

于 2012-11-26T22:24:11.247 に答える
6

より簡単な解決策は次のとおりです。必要なのは、セルが入力された後、に設定sizeToFitすることだけです。とを介しUITableViewて設定すると、メソッドでこれを行うことができます。または、次のようにします。delegatedataSourcexibviewDidLoadviewDidAppear

- (void)viewDidLoad
{
    [super viewDidLoad];

    [yourTableView sizeToFit];
}

ただし、コードのどこかにdelegateとを追加する場合は、この後に追加する必要があります。dataSourcesizeToFit

- (void)someMethod
{
    [yourTableView setDelegate:self];
    [yourTableView setDataSource:self];

    [yourTableView sizeToFit];
}

また、どこかでこれを行う場合は、reloadTable の後にこれを行う必要があります。

これにより、セルの高さの合計である高さに正確にテーブルのサイズが変更されます!

于 2014-06-13T10:01:52.790 に答える
4

このように試すことができます。

-(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    if([indexPath row] == ((NSIndexPath*)[[tableView indexPathsForVisibleRows] lastObject]).row){
        NSLog(@"%f",your_tableView.contentSize.height);
    }
}

スウィフト 3.0では

func tableView(_ tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    if indexPath.row == tableView.indexPathsForVisibleRows?.last?.row {
        print("\(tableView.contentSize.height)")
    }
}
于 2013-09-21T12:49:47.903 に答える
3

テーブル ビューに contentSize プロパティのオブザーバーを追加し、それに応じてフレーム サイズを調整します。

viewDidLoad に次のコード行を追加します

[your_tableview addObserver:self forKeyPath:@"contentSize" options:0 context:NULL];

次に、コールバックで:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
    {
         CGRect frame = your_tableview.frame;
         frame.size = your_tableview.contentSize;
         your_tableview.frame = frame;
    }

これがあなたを助けることを願っています。

于 2014-08-21T05:16:11.317 に答える
3

テーブルに高さの制約を設定し、コンセントに接続して、View Controller に以下を追加します。

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    tableViewHeightContraint.constant = tableView.contentSize.height
}
于 2017-04-06T19:42:23.807 に答える
0

それを使用するだけtableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; で問題が解決します。

于 2015-03-07T06:14:01.007 に答える