9

UITableViewControllerにグループ化されたUITableViewがあり、水平方向にサイズを変更したいと思います。

私はさまざまな方法を試しましたが、どれも完璧ではありませんでした。

私が試したこと:

1.)オーバーライド- [UITableView setFrame:]しますが、セクションのヘッダーは移動せず、両側に黒い領域があります(テーブルビューの後ろに何もないため)。

2.)オーバーライド- [UITableViewCell setFrame:]しますが、それでもヘッダーは移動しません(これは重要です)。

3.)- [self.view setFrame:]UITableViewControllerから呼び出しますが、何もしません。

あなたがそれを解決する方法について何か考えを持っているならば、それを私と共有してください!

4

5 に答える 5

37

- [UITableView setFrame:]から呼び出すと- [UITableViewController viewDidAppear:]、次のように機能します。

- (void)viewDidAppear:(BOOL)animated
{
    [self.tableView setFrame:CGRectMake(x, y, w, h)];
}

テーブルビューの両側に黒いバーが表示されないようにするには、アプリケーションのメインウィンドウの背景色を白に設定します。

[[[UIApplication sharedApplication] keyWindow] setBackgroundColor:[UIColor whiteColor]];
于 2012-11-12T21:32:55.157 に答える
14

主な問題は、aのテーブルビューがUITableViewControllerメインビューであるため、サイズを変更することを意図していないことです。

最良のオプションは、を使用しないことUITableViewControllerです。代わりに、ViewControllerのメインビューのサブビューとしてUIViewController独自のものを使用して追加してください。UITableViewこのようにして、必要に応じてサイズを変更できます。

もちろん、すべての配管を接続するための追加の作業があるため、ViewControllerはTableView Controllerのように機能しますが、行うことはそれほど多くありません。

于 2012-11-12T20:19:23.667 に答える
2

サイズ変更されているヘッダーを修正するには、次のことを試してください。

- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    CGFloat headerHeight = 40;
    UIView *headerView = [[UIView alloc] initWithFrame: CGRectMake(0, 0, self.view.frame.size.width, headerHeight)];
    UILabel *cellLabel = [[UILabel alloc] initWithFrame: headerView.frame];
    [cellLabel setText: @"My Text"];
    [cellLabel setBackgroundColor: [UIColor clearColor]];
    [headerView addSubview: cellLabel];
    return headerView;
}

    - (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 40;
}

このコードは、このメソッドを置き換える必要があります。

- (NSString *) tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
于 2012-11-12T21:23:00.470 に答える
2

これは古い質問ですが、このシナリオでは、UITableViewControllerのtableViewのサイズを変更するのではなく、コンテナビューに埋め込まれたUITableViewControllerを使用する方がよいと思います。

于 2015-02-12T18:09:03.390 に答える
0

パーティーに少し遅れますが、トピックを検索している他の人にとってはいつでも便利です...

viewDidの表示でこれを行うのは正しい方法ではないと思います。これは、ユーザーに確実に表示され、目の前でサイズが変更されるためです。優れたユーザーエクスペリエンスのimoにはなりません。

swift4では次のようなものを使用します

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    var rect = tableView.frame
    if rect.size.height != h && rect.size.width != w { 
        // set x and y to any value you need. you can also have a 
        // condition about the origin (x,y) 
        // if you have a gap on the left or top...
        rect.size.height = h;
        rect.size.width = w;
        tableView.frame = rect
    }
}

これにより、tableViewが表示される前に変更が加えられ、ユーザーエクスペリエンスが大幅に向上します。また、受け入れられた回答に記載されているように、ウィンドウの色をテーブルビューの色に設定して、より適切にブレンドする必要があります(デフォルトは白)。

    UIApplication.shared.keyWindow?.backgroundColor = .white
于 2018-03-12T15:21:33.350 に答える