2016-07-15 7 views
0

私のxamarin iOSアプリケーションでは、リストビューが表示されています。ロード中にロードアイコンを表示したいと思います。しかし、私はページ全体を無効にしたくありません。私は、バックナビゲーションを使用して、望むなら、ユーザーはまだ戻って欲しい。iOS:オーバーレイをロード中にナビゲーションを有効にする

thisを参考にしました。

CGRectフレームを設定しようとしています。トップにナビゲーションを残しておき、残りのページを無効にします。

私はこのようなものを使用しています:new CGRect(30, 0,0, 0)トップから30ユニットを残しても動作しません。誰もが、ナビゲーションバーだけを残してページの残りの部分をカバーするフレームを持って私を助けることができますか?

答えて

1

フレームを使用するよりも、このタスクを実行するためには、AutoLayoutがはるかに良い方法です。 REALY、本当に古いバージョンのiOSをターゲットにする必要がない限り、一般的にAutoLayoutが使えます。

私はUIViewControllerを使用していて、UITableViewControllerではないと仮定しています。 UITableViewControllerは、UITableViewに追加することしかできないため、この作業がはるかに難しいため、これは重要な違いです。

このAddAnOverlayメソッドをUIViewControllerクラスに追加して、オーバーレイを表示するときはいつでも呼び出すことができます。後で削除できるように、おそらくoverlayをインスタンス変数に入れる必要があります。 overlay.RemoveFromSuperview()を呼び出してそれを削除すれば、完了です。

void AddAnOverlay() 
    { 
     var overlay = new UIView(); 
     overlay.BackgroundColor = UIColor.Black.ColorWithAlpha(0.45f); // or whatever colo 
     overlay.TranslatesAutoresizingMaskIntoConstraints = false; 

     var label = new UILabel(); 
     label.TranslatesAutoresizingMaskIntoConstraints = false; 
     label.Text = "Loading Fantastic Things!"; 

     var spinner = new UIActivityIndicatorView(); 
     spinner.TranslatesAutoresizingMaskIntoConstraints = false; 
     spinner.StartAnimating(); 

     overlay.AddSubview(spinner); 
     overlay.AddConstraint(NSLayoutConstraint.Create(overlay, NSLayoutAttribute.CenterX, NSLayoutRelation.Equal, spinner, NSLayoutAttribute.CenterX, 1, 0)); 
     overlay.AddConstraint(NSLayoutConstraint.Create(overlay, NSLayoutAttribute.CenterY, NSLayoutRelation.Equal, spinner, NSLayoutAttribute.CenterY, 1, 0)); 

     overlay.AddSubview(label); 
     // can adjust space between by changing -30 to whatever 
     overlay.AddConstraint(NSLayoutConstraint.Create(spinner, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal, label, NSLayoutAttribute.Top, 1, -30)); 
     overlay.AddConstraint(NSLayoutConstraint.Create(overlay, NSLayoutAttribute.CenterX, NSLayoutRelation.Equal, label, NSLayoutAttribute.CenterX, 1, 0)); 

     View.AddSubview(overlay); 
     View.AddConstraint(NSLayoutConstraint.Create(TopLayoutGuide, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal, overlay, NSLayoutAttribute.Top, 1, 0)); 
     View.AddConstraint(NSLayoutConstraint.Create(View, NSLayoutAttribute.CenterX, NSLayoutRelation.Equal, overlay, NSLayoutAttribute.CenterX, 1, 0)); 
     View.AddConstraint(NSLayoutConstraint.Create(View, NSLayoutAttribute.Width, NSLayoutRelation.Equal, overlay, NSLayoutAttribute.Width, 1, 0)); 
     View.AddConstraint(NSLayoutConstraint.Create(BottomLayoutGuide, NSLayoutAttribute.Top, NSLayoutRelation.Equal, overlay, NSLayoutAttribute.Bottom, 1, 0)); 
    } 

NSLayoutConstraintTopLayoutGuideBottomLayoutGuideに注意してください。これらは現在のView Controllerの上部と下部を表しているので、ナビゲーションバーやタブバーなどを隠さないようにサイズを変更できます。

1

オーバーレイをテーブルビューに追加する必要があります。これにより、センタリングの問題が発生します。これにはいくつかのオプションがあります:スクロール時にオーバーレイの位置を再計算し、自動レイアウトで参照するテーブルビューの背後に追加のレイヤーを追加します...

私はautolayoutを使用しています。番号を使用することもできますが、境界を使用しても可能です。また、ユーザーがナビゲートしてもタスクをキャンセルする必要があることに注意してください。

関連する問題