3

SnowLeopardでXcode4.2を使用しています。私がやろうとしていること。基本的に、私はテーブルビューを備えたマスタービューコントローラーを持っています。テーブルビューにデータを入力するには、APIを呼び出して、そこから情報をダウンロードする必要があります。

APIからデータをダウンロードしている間、何かが起こっていてアプリがスタックしていないことをユーザーに知らせるために、アクティビティインジケーターを表示したいと思います。

私が行ったことは、アルファ0.5を使用してテーブルビュー上に新しいUIViewを作成し、その中央にアクティビティインジケーターを配置したことです。これは、マスターコントローラービューが読み込まれるときに実行するコードです。

// Show the activity indicator
self.overlayView = [[UIView alloc] init];
self.overlayView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];
self.overlayView.frame = self.tableView.frame;
self.activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
CGRect frame = self.overlayView.frame;
self.activityIndicator.center = CGPointMake(frame.size.width/2, frame.size.height/2);
[self.overlayView addSubview:self.activityIndicator];
[self.activityIndicator startAnimating];
[self.tableView addSubview:self.overlayView];

APIからデータが読み込まれると、オーバーレイビューとアクティビティインジケーターを非表示にします。

[self.activityIndicator removeFromSuperview];
[self.overlayView removeFromSuperview];

正常に動作していますが、問題は、オーバーレイビューが適切に配置されておらず、上マージンがあり、見栄えが悪いことです。外観は次のとおりです。

ここに画像の説明を入力してください

4

1 に答える 1

6

使用しないでください

self.overlayView.frame = self.tableView.frame;

代わりに使用する

self.overlayView.frame = self.tableView.bounds;

tableViewのorigin.y=20.0fのようです。


その他の注意事項

  • UIViewの指定された初期化子は、それを使用する必要があるinitWithFrame:ためです。

  • あなたは単にこれをすることができます

      self.activityIndicator.center = CGPointMake(frame.size.width/2, frame.size.height/2);
    

      self.activityIndicator.center = self.overlayView.center;
    
于 2012-04-07T00:08:25.680 に答える