3

私は UITableViewController ビューを持っています CGRectZero のフレームで割り当て/初期化する UITableView :

self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];

tableView の途中にビュー(UIActivityIndi​​catorView と UILabel を持ったローディングビュー)を追加したいのですが、tableView のフレームがわからないので配置方法がわかりません。

x = (self.tableview.frame.size.width - loadingView.frame.size.width) / 2.0;
y = (self.tableview.frame.size.height - loadingView.frame.size.height) / 2.0;
[loadingView setCenter:CGPointMake(x, y)];

CGRectZeroフレームでtableViewを初期化したので、画面上で使用可能な場所全体を使用できますが(そうしました)、そのフレームが更新されるか何かになると思いました。

何か案は ?ありがとう !

4

3 に答える 3

2

プログラムでフレームを推定することができました。私のtableViewがnavigationBarとtabBarの間にあるとは言いませんでしたので、この場合のコードは次のとおりです。

CGFloat x = self.navigationController.view.frame.size.width;
CGFloat y = self.navigationController.view.frame.size.height -
            self.tabBarController.tabBar.frame.size.height;

self.tableView = [[UITableViewController alloc] initWithFrame:CGRectMake(0.0, 0.0, x, y)];

そして、loadingView のポジショニングのために上記に投稿されたコードは魅力のように機能します!

もちろん、私はより良い解決策をたくさん開いています

于 2010-04-02T13:00:12.137 に答える
1

LoadingView に、それが表示されるビューへの参照を与えることができます。次に、それが表示されようとしているときに、それが表しているビューのフレームをチェックして、そのビューを中央に合わせて一致させ、TableView のスーパービューのサブビューとして自身を追加します。

- (void)show
{
    self.center = targetView.center;
    [[targetView superview] addSubview:self];
}

別のオプションは、LoadingView で KVO を使用して UITableView のフレームを監視し、それに応じて独自のフレームを調整することです。

于 2010-04-27T12:56:09.120 に答える
0

ビュー コントローラーが UITableViewController の場合、テーブル ビューのフレームは UIViewController のフレームと同じです。

UIViewController のビューの中央に配置してみませんか?

self が UITableViewController であると仮定します。

loadingView.center = self.view.center;
于 2010-04-02T17:32:16.157 に答える